Travail avec les dates en C++ : bibliothèques chrono, date.h et Boost.DateTime

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travail avec les dates en C++ : aperçu des bibliothèques modernes



Le travail avec les dates et l'heure est l'une des tâches clés dans le développement de logiciels. En C++, il n'y a pas eu pendant longtemps d'outillage standard pratique, ce qui a conduit à l'utilisation de fonctions C (ctime, localtime) ou de solutions tierces. Cependant, avec l'arrivée de la norme C++11 et des versions ultérieures, la situation a radicalement changé. Dans cet article, nous examinerons trois approches principales pour travailler avec les dates en C++ : la bibliothèque standard std::chrono, l'extension date.h de Howard Hinnant et le puissant framework Boost.DateTime.



1. Bibliothèque standard std::chrono (C++11 et plus récent)



std::chrono fait partie de la bibliothèque standard C++, fournissant des types pour représenter les points temporels (time_point), les durées (duration) et les horloges (clock). Elle est idéale pour mesurer des intervalles de temps, travailler avec des minuteurs et des délais de haute précision. Cependant, jusqu'à C++20, elle ne disposait pas d'outils pratiques pour travailler avec les dates calendaires (jour, mois, année).



Exemple : mesure du temps d'exécution du code

#include <iostream>#include <chrono>#include <thread>

int main() { auto start = std::chrono::high_resolution_clock::now();

// Simulation de travail std::this_thread::sleep_for(std::chrono::milliseconds(500));

auto end = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);

std::cout << "Temps d'exécution : " << duration.count() << " ms"; return 0;}


Avec C++20, std::chrono a reçu le support du calendrier : les types year, month, day, year_month_day et les opérateurs pour travailler avec eux. On peut maintenant écrire :

#include <chrono>#include <iostream>

int main() { using namespace std::chrono; auto today = floor<days>(system_clock::now()); year_month_day ymd{today}; std::cout << int(ymd.year()) << "-" << unsigned(ymd.month()) << "-" << unsigned(ymd.day()) << ""; return 0;}


2. Bibliothèque date.h (Howard Hinnant)



Avant la sortie de C++20, les développeurs utilisaient activement la bibliothèque date.h — une extension en un seul fichier pour std::chrono, écrite par Howard Hinnant. Elle fournit un ensemble complet de fonctions pour travailler avec les dates : analyse syntaxique, formatage, calcul de la différence entre les dates, travail avec les fuseaux horaires et même le support du calendrier julien.



Exemple : analyse syntaxique d'une chaîne en date

#include "date.h"#include <iostream>#include <sstream>

int main() { std::istringstream ss("2025-04-07"); date::sys_days tp; ss >> date::parse("%F", tp); // Format ISO 8601 auto ymd = date::year_month_day{tp}; std::cout << "Année : " << int(ymd.year()) << ""; return 0;}


Exemple : calcul de l'âge

#include "date.h"#include <iostream>

int main() { using namespace date; auto birth = sys_days{year{1990}/month{1}/day{15}}; auto today = floor<days>(std::chrono::system_clock::now()); auto age = today - birth; std::cout << "Âge en jours : " << age.count() << ""; // Âge en années (approximatif) auto years = duration_cast<std::chrono::years>(age); std::cout << "Âge en années : " << years.count() << ""; return 0;}


La bibliothèque date.h se connecte facilement (il suffit de copier le fichier d'en-tête) et ne nécessite pas de compilation. Elle est devenue la base du std::chrono standard en C++2

Recommendations