Arbeiten mit Daten in C++: Bibliotheken chrono, date.h und Boost.DateTime

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 Daten in C++: Überblick über moderne Bibliotheken



Die Arbeit mit Datum und Uhrzeit ist eine der Kernaufgaben in der Softwareentwicklung. In C++ gab es lange Zeit keine praktische Standardwerkzeuge, was zur Verwendung von C-Funktionen (ctime, localtime) oder Drittanbieterlösungen führte. Mit der Einführung des Standards C++11 und späterer Versionen hat sich die Situation jedoch grundlegend geändert. In diesem Artikel betrachten wir drei Hauptansätze für die Arbeit mit Daten in C++: die Standardbibliothek std::chrono, die Erweiterung date.h von Howard Hinnant und das leistungsstarke Framework Boost.DateTime.



1. Die Standardbibliothek std::chrono (C++11 und neuer)



std::chrono ist Teil der C++-Standardbibliothek und bietet Typen zur Darstellung von Zeitpunkten (time_point), Dauern (duration) und Uhren (clock). Sie eignet sich ideal zum Messen von Zeitintervallen, für die Arbeit mit Timern und hochpräzisen Verzögerungen. Bis C++20 fehlten jedoch praktische Mittel für die Arbeit mit Kalenderdaten (Tag, Monat, Jahr).



Beispiel: Messen der Ausführungszeit von Code

#include <iostream>#include <chrono>#include <thread>

int main() { auto start = std::chrono::high_resolution_clock::now();

// Arbeitsimulation std::this_thread::sleep_for(std::chrono::milliseconds(500));

auto end = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);

std::cout << "Ausführungszeit: " << duration.count() << " ms"; return 0;}


Mit C++20 erhielt std::chrono Kalenderunterstützung: die Typen year, month, day, year_month_day und Operatoren für die Arbeit mit ihnen. Jetzt kann man schreiben:

#include <chrono>#include <iostream>

int main() { using namespace std::chrono; auto today = floor<days>(system_clock::now()); year_month_day ymd{today}; std::cout << int(ymd.year()) << "-" << unsigned(ymd.month()) << "-" << unsigned(ymd.day()) << ""; return 0;}


2. Die Bibliothek date.h (Howard Hinnant)



Vor der Veröffentlichung von C++20 nutzten Entwickler aktiv die Bibliothek date.h – eine einzeilige Erweiterung für std::chrono, geschrieben von Howard Hinnant. Sie bietet einen vollständigen Satz von Funktionen für die Arbeit mit Daten: Parsing, Formatierung, Berechnung der Differenz zwischen Daten, Arbeit mit Zeitzonen und sogar Unterstützung für den julianischen Kalender.



Beispiel: Parsen eines Strings in ein Datum

#include "date.h"#include <iostream>#include <sstream>

int main() { std::istringstream ss("2025-04-07"); date::sys_days tp; ss >> date::parse("%F", tp); // ISO 8601 Format auto ymd = date::year_month_day{tp}; std::cout << "Jahr: " << int(ymd.year()) << ""; return 0;}


Beispiel: Altersberechnung

#include "date.h"#include <iostream>

int main() { using namespace date; auto birth = sys_days{year{1990}/month{1}/day{15}}; auto today = floor<days>(std::chrono::system_clock::now()); auto age = today - birth; std::cout << "Alter in Tagen: " << age.count() << ""; // Alter in Jahren (ungefähr) auto years = duration_cast<std::chrono::years>(age); std::cout << "Alter in Jahren: " << years.count() << ""; return 0;}


Die Bibliothek date.h lässt sich leicht einbinden (es reicht, die Header-Datei zu kopieren) und erfordert keine Kompilierung. Sie wurde zur Grundlage für das standardmäßige std::chrono in C++2

Empfehlungen