Travail avec les dates en C++ : aperçu des bibliothèques clés
Le travail avec les dates et l'heure est l'une des tâches fondamentales en programmation. En C++, la bibliothèque standard a longtemps été limitée aux utilitaires de C (<ctime>), qui sont peu pratiques et non sécurisés du point de vue des types. À partir de C++11 et surtout de C++20, la situation a radicalement changé. Dans cet article, nous examinerons trois approches principales pour travailler avec les dates en C++ moderne.
1. Bibliothèque standard <chrono> (C++11 et C++20)
Depuis C++11, l'en-tête <chrono> a été intégré à la bibliothèque standard, fournissant des horloges, des instants (time_point) et des durées (duration) typés de manière sécurisée. En C++20, la bibliothèque a été enrichie avec la prise en charge des types calendaires (année, mois, jour) et des fuseaux horaires.
Composants principaux :
std::chrono::system_clock— horloge système, liée au temps réel.std::chrono::steady_clock— horloge monotone pour mesurer des intervalles.std::chrono::duration— intervalle de temps (par exemple, secondes, millisecondes).std::chrono::time_point— un point dans le temps.- Types calendaires (C++20) :
year_month_day,hh_mm_sset autres.
#include <iostream>#include <chrono>#include <format> // C++20
int main() { using namespace std::chrono;
// Heure actuelle auto now = system_clock::now(); std::cout << "Heure actuelle : " << now << "";
// Conversion en date calendaire (C++20) auto dp = floor<days>(now); year_month_day ymd{dp}; std::cout << "Année : " << (int)ymd.year() << "";
// Mesure d'un intervalle auto start = steady_clock::now(); // ... du code ... auto end = steady_clock::now(); auto diff = end - start; std::cout << "Écoulé : " << duration_cast<milliseconds>(diff).count() << " ms"; return 0;}Avantages : intégrée à la norme, sécurité des types, en développement actif.
Inconvénients : pour C++20, nécessite un compilateur moderne (GCC 12+, Clang 14+, MSVC 2022).
2. Boost.DateTime
La bibliothèque Boost.DateTime est l'une des plus anciennes et des plus matures pour la gestion des dates. Avant l'arrivée de C++20, elle était de facto la norme. Elle fournit les classes boost::gregorian::date, boost::posix_time::ptime et un support complet des fuseaux horaires.
Fonctionnalités principales :
- Calendrier grégorien avec prise en charge des années bissextiles.
- Manipulations de dates : ajout de jours, mois, années.
- Formatage et analyse via
boost::date_time::date_facet. - Prise en charge des fuseaux horaires via
boost::local_time.
#include <iostream>#include <boost/date_time/gregorian/gregorian.hpp>#include <boost/date_time/posix_time/posix_time.hpp>
int main() { using namespace boost::gregorian; using namespace boost::posix_time;
// Création d'une date date d(2024, 12, 25); std::cout << "Date : " << d << ""; // 2024-Dec-25
// Ajout de jours date next_week = d + days(7); std::cout << "Dans une semaine : " << next_week << "";
// Différence entre dates days diff = next_week - d; std::cout << "Différence : " << diff.days() << " jours";
// Heure actuelle à la seconde près ptime now = second_clock::local_time(); std::cout << "Maintenant : " << now << ""; return 0;}Avantages : éprouvée par le temps, documentation complète, fonctionne avec C++98.
\Aussi dans la bibliothèque
Guide complet Symfony/EventDispatcher PHP : tutoriel et exemples
Générateur de QR codes en C++ avec libqrencode et CQRcode
ts-mockito TypeScript : guide complet avec exemples pratiques
Travailler avec XML en PHP : analyse, création et traitement des données
SwiftyJSON Swift : guide complet avec exemples pratiques