Arbeiten mit Datumsangaben in C++: Überblick über die besten Bibliotheken zur Zeitmanipulation

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Datumsangaben in C++: Überblick über die wichtigsten Bibliotheken



Die Arbeit mit Datum und Zeit ist eine der grundlegenden Aufgaben in der Programmierung. In C++ war die Standardbibliothek lange Zeit auf die Hilfsmittel aus C (<ctime>) beschränkt, die aus Typsicht unbequem und unsicher sind. Ab C++11 und insbesondere C++20 hat sich die Situation grundlegend geändert. In diesem Artikel betrachten wir drei Hauptansätze für die Arbeit mit Datumsangaben im modernen C++.



1. Standardbibliothek <chrono> (C++11 und C++20)



Ab C++11 wurde der Header <chrono> in die Standardbibliothek aufgenommen, der typsichere Uhren, Zeitpunkte (time_point) und Dauern (duration) bereitstellt. In C++20 wurde die Bibliothek um die Unterstützung von Kalendertypen (Jahr, Monat, Tag) und Zeitzonen erweitert.



Hauptkomponenten:

  • std::chrono::system_clock — Systemuhr, verbunden mit der Echtzeit.
  • std::chrono::steady_clock — monotone Uhr zur Messung von Intervallen.
  • std::chrono::duration — Zeitintervall (z. B. Sekunden, Millisekunden).
  • std::chrono::time_point — ein Zeitpunkt.
  • Kalendertypen (C++20): year_month_day, hh_mm_ss und andere.


#include <iostream>#include <chrono>#include <format> // C++20

int main() { using namespace std::chrono;

// Aktuelle Zeit auto now = system_clock::now(); std::cout << "Aktuelle Zeit: " << now << "";

// Umwandlung in Kalenderdatum (C++20) auto dp = floor<days>(now); year_month_day ymd{dp}; std::cout << "Jahr: " << (int)ymd.year() << "";

// Intervallmessung auto start = steady_clock::now(); // ... irgendein Code ... auto end = steady_clock::now(); auto diff = end - start; std::cout << "Vergangen: " << duration_cast<milliseconds>(diff).count() << " ms"; return 0;}


Vorteile: im Standard enthalten, typsicher, wird aktiv weiterentwickelt.

Nachteile: für C++20 wird ein moderner Compiler benötigt (GCC 12+, Clang 14+, MSVC 2022).



2. Boost.DateTime



Die Bibliothek Boost.DateTime ist eine der ältesten und ausgereiftesten für die Arbeit mit Datumsangaben. Vor dem Erscheinen von C++20 war sie de facto der Standard. Sie bietet die Klassen boost::gregorian::date, boost::posix_time::ptime und vollständige Unterstützung für Zeitzonen.



Hauptfunktionen:

  • Gregorianischer Kalender mit Unterstützung für Schaltjahre.
  • Datumsmanipulation: Addition von Tagen, Monaten, Jahren.
  • Formatierung und Parsing über boost::date_time::date_facet.
  • Unterstützung für Zeitzonen über 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;

// Erstellen eines Datums date d(2024, 12, 25); std::cout << "Datum: " << d << ""; // 2024-Dec-25

// Addition von Tagen date next_week = d + days(7); std::cout << "In einer Woche: " << next_week << "";

// Differenz zwischen Daten days diff = next_week - d; std::cout << "Differenz: " << diff.days() << " Tage";

// Aktuelle Zeit mit Sekundengenauigkeit ptime now = second_clock::local_time(); std::cout << "Jetzt: " << now << ""; return 0;}


Vorteile: bewährt, umfangreiche Dokumentation, funktioniert mit C++98.

Empfehlungen