Travailler avec les dates et l'heure en C++ : de A à Z — guide complet

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 A à Z

\n\n

Travailler avec les dates et l'heure est l'une des tâches fondamentales en programmation. Cela est nécessaire partout : de la journalisation des événements au calcul des délais et à la création de graphiques. En C++, ce domaine n'a historiquement pas été des plus pratiques, mais avec l'arrivée de la norme C++11 et des versions suivantes (C++14, C++17, C++20), la situation a radicalement changé. Dans cet article, nous aborderons tous les aspects clés : des fonctions C classiques à la bibliothèque moderne chrono, en passant par les minuteries, le formatage et l'analyse. Ce contenu sera utile aussi bien aux débutants qu'aux développeurs expérimentés souhaitant systématiser leurs connaissances.

\n\n

1. Approche classique : time_t et structure tm

\n\n

Avant l'apparition de chrono, le principal outil était les fonctions de <ctime>. Cette approche reste pertinente pour la prise en charge du code ancien et pour les tâches simples.

\n\n

Fonctions principales :

\n
    \n
  • time() — retourne l'heure actuelle sous forme de time_t (nombre de secondes depuis le 1er janvier 1970).
  • \n
  • localtime() — convertit time_t en structure tm (heure locale).
  • \n
  • gmtime() — convertit en UTC.
  • \n
  • strftime() — formate tm en chaîne de caractères.
  • \n
  • mktime() — conversion inverse : tm → time_t.
  • \n
\n\n
#include <iostream>\n#include <ctime>\n\nint main() {\n    // Obtenir l'heure actuelle\n    std::time_t now = std::time(nullptr);\n\n    // Convertir en heure locale\n    std::tm* local_tm = std::localtime(&now);\n\n    // Formater en chaîne de caractères\n    char buffer[80];\n    std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local_tm);\n\n    std::cout << "Heure actuelle : " << buffer << std::endl;\n    return 0;\n}
\n\n

Inconvénients de l'approche :

\n
    \n
  • Fonctionne uniquement avec les secondes (millisecondes et microsecondes indisponibles).
  • \n
  • Non sécurisé dans les environnements multithreads (utilisez localtime_r sous POSIX).
  • \n
  • La structure tm contient des champs faciles à confondre (année décalée de 1900, mois commençant à 0).
  • \n
  • Absence de prise en charge des fuseaux horaires et des intervalles de temps.
  • \n
\n\n

2. C++ moderne : la bibliothèque chrono (C++11 et versions ultérieures)

\n\n

La bibliothèque chrono est un outil puissant et type-sécurisé pour travailler avec le temps. Elle est au cœur de tous les projets C++ modernes.

\n\n

Composants principaux :

\n
    \n
  • Horloges (clocks) : system_clock (heure système), steady_clock (horloge monotone pour les mesures), high_resolution_clock (résolution maximale).
  • \n
  • Instants temporels (time_point) : liés à des horloges spécifiques.
  • \n
  • Durées (duration) : intervalles de temps (secondes, millisecondes, nanosecondes).
  • \n
\n\n
#include <iostream>\n#include <chrono>\n#include <thread>\n\nint main() {\n    using namespace std::chrono;\n\n    // Instant temporel actuel\n    auto now = system_clock::now();\n\n    // Convertir en time_t pour l'affichage\n    std::time_t now_c = system_clock::to_time_t(now);\n    std::cout << "Heure actuelle : " << std::ctime(&now_c);\n\n    // Mesure du temps d'exécution\n    auto start = steady_clock::now();\n    std::this_thread::sleep_for(milliseconds(500)); // simulation de travail\n    auto end = steady_clock::now();\n\n    auto duration = duration_cast<milliseconds>(end - start);\n    std::cout << "Temps écoulé : " << duration.count() << " ms" << std::endl;\n\n    return 0;\n}
\n\n

Avantages de chrono :

\n
    \n
  • Haute précision (nanosecondes).
  • \n
  • Sécurité de type (impossible d'ajouter accidentellement des secondes à des millisecondes).
  • \n
  • Prise en charge de l'arithmétique (addition/soustraction

Blogs

Book Recommendations