Travailler avec les dates et l'heure en C++ : guide complet sur chrono

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

Travailler avec les dates et l'heure en C++ : de <ctime> au moderne <chrono>



Travailler avec les dates et l'heure est l'une des tâches clés dans toute application sérieuse : des logs et sauvegardes aux minuteurs et calculs financiers. En C++, deux approches ont historiquement émergé : l'approche classique de style C via le fichier d'en-tête <ctime> et l'approche moderne, type-safe via la bibliothèque <chrono>, apparue en C++11 et considérablement étendue en C++20. Dans cet article, nous analyserons les deux méthodes, apprendrons à obtenir l'heure actuelle, mesurer des intervalles, formater des dates et éviter les erreurs typiques.



1. La méthode classique : <ctime> et std::time_t



Avant C++11, la seule manière standard de travailler avec l'heure était les fonctions du C : time(), localtime(), strftime(). Cette approche est encore utilisée dans le code legacy et les tâches simples.



Obtenir l'heure actuelle

La fonction std::time(nullptr) renvoie le nombre de secondes depuis le 1er janvier 1970 (époque Unix) sous forme d'un entier std::time_t.



#include <iostream>#include <ctime>

int main() { std::time_t now = std::time(nullptr); std::cout << "Heure actuelle (secondes depuis l'époque) : " << now << std::endl; return 0;}


Conversion en format lisible

Pour obtenir une structure avec les composants (année, mois, jour, heures, etc.), utilisez std::localtime() ou std::gmtime().



#include <iostream>#include <ctime>

int main() { std::time_t now = std::time(nullptr); std::tm* local = std::localtime(&now);

std::cout << "Année : " << (local->tm_year + 1900) << std::endl; std::cout << "Mois : " << (local->tm_mon + 1) << std::endl; std::cout << "Jour : " << local->tm_mday << std::endl; return 0;}


Formatage de chaîne avec strftime

La fonction std::strftime() permet de formater flexiblement une date en une chaîne selon un modèle donné.



#include <iostream>#include <ctime>

int main() { std::time_t now = std::time(nullptr); std::tm* local = std::localtime(&now);

char buffer[80]; std::strftime(buffer, sizeof(buffer), "%d.%m.%Y %H:%M:%S", local); std::cout << "Date et heure actuelles : " << buffer << std::endl; return 0;}


⚠️ Important : std::localtime() et std::gmtime() renvoient un pointeur vers un tampon statique — ce n'est pas thread-safe. En C++11, des versions réentrantes sont apparues : localtime_s (Windows) ou localtime_r (POSIX).



2. C++ moderne : la bibliothèque <chrono>



La bibliothèque <chrono> offre un typage strict, la gestion de différentes unités de temps et une haute précision. Les composants principaux :

  • Horloges (clocks) : system_clock, steady_clock, high_resolution_clock
  • Instants temporels (time_point) : liaison à un moment spécifique
  • Durées (duration) : intervalles de temps (secondes, millisecondes, etc.)


Obtenir l'instant actuel

#include <iostream>#include <chrono>#include <ctime> // pour std::time_t

int main() { auto now = std::chrono::system_clock::now(); std::time_t now_time = std::chrono::system_clock::to_time_t(now); std::cout << "Heure actuelle : " << std::ctime(&now_time); return 0;}


Mesure des intervalles de temps (minuteur)

L'une des tâches les plus courantes est de mesurer le temps d'exécution du code. Pour cela, il est idéal d'utiliser

Blogs

Book Recommendations