Travail avec les dates en C++ : aperçu des meilleures bibliothèques pour la manipulation du temps

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 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_ss et 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.

\

Recommendations