Arbeiten mit Daten in C++: Überblick über 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 Daten in C++: Überblick über die wichtigsten Bibliotheken



Die Verwaltung von Datum und Zeit ist eine der grundlegenden Aufgaben bei der Entwicklung jeder ernsthaften Anwendung. Von der Ereignisprotokollierung über die Berechnung von Zeitintervallen bis hin zur Aufgabenplanung – C++ bietet dem Entwickler mehrere leistungsstarke Werkzeuge. In diesem Artikel betrachten wir drei Hauptansätze: die moderne Standardbibliothek std::chrono, die Erweiterung von Howard Hinnant (teilweise in C++20 eingeflossen) und das bewährte Boost.DateTime.



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



Seit C++11 ist die Arbeit mit Zeit in der Standardbibliothek deutlich komfortabler geworden. std::chrono stellt Typen zur Darstellung von Zeitpunkten (time_point), Dauern (duration) und Uhren (clock) bereit. Bis C++20 fehlten jedoch praktische Mittel für die Arbeit mit Kalenderdaten (Tag, Monat, Jahr).



Hauptkomponenten:

  • Uhren (Clocks): system_clock (Systemzeit), steady_clock (monotone Zeit für Messungen), high_resolution_clock (meist ein Alias für eine der ersten beiden).
  • Dauern (Durations): std::chrono::seconds, milliseconds, microseconds usw. Ermöglichen arithmetische Operationen.
  • Zeitpunkte (Time points): Bindung einer Dauer an einen bestimmten Startpunkt (Epoche) einer Uhr.


Beispiel: Messung der Ausführungszeit

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

int main() { auto start = std::chrono::high_resolution_clock::now(); 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;}


Dieser Code demonstriert eine präzise Zeitmessung mit Millisekundengenauigkeit. Für die Arbeit mit Kalenderdaten gibt es in C++20 neue Möglichkeiten, aber wenn Sie einen älteren Standard verwenden, werden Ihnen die folgenden Bibliotheken nützlich sein.



2. Die "date"-Bibliothek von Howard Hinnant (Vorgänger von C++20)



Vor der Veröffentlichung von C++20 erstellte Howard Hinnant die Bibliothek date, die zum De-facto-Standard für die Arbeit mit Kalenderdaten wurde. Sie ist leichtgewichtig, benötigt kein Boost und arbeitet auf Basis von std::chrono. Ein Großteil ihrer Funktionalität ist in C++20 eingeflossen, aber die Bibliothek selbst ist weiterhin relevant für Projekte, die C++11/14/17 verwenden.



Hauptfunktionen:

  • Typen year_month_day, year_month, weekday.
  • Parsen von Daten aus Zeichenketten (parse).
  • Formatieren von Daten (format).
  • Addition/Subtraktion von Tagen, Monaten, Jahren.
  • Unterstützung von Zeitzonen (Erweiterung tz.h).


Beispiel: Arbeiten mit Daten

#include <iostream>#include <date/date.h>#include <chrono>

int main() { using namespace date; using namespace std::chrono; // Erstelle ein Datum: 15. März 2025 auto d1 = 2025_y / March / 15; std::cout << "Datum: " << d1 << ""; // Addiere 30 Tage auto d2 = d1 + days{30}; std::cout << "In 30 Tagen: " << d2 << ""; // Differenz in Tagen auto diff = (d2 - d1).count(); std::cout << "Differenz: " << diff << " Tage"; // Aktuelles Datum abrufen auto today = floor<days>(system_clock::now()); std::cout << "Heute: " << year_month_day{today} << ""; return 0;}


Diese

Empfehlungen