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,microsecondsusw. 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
Auch in der Bibliothek
E-Mail-Versand mit Swift: Vollständiger Leitfaden zu SMTP und MailKit
QR-Code-Generierung in Java: Bibliothek ZXing (ausführliche Anleitung)
Fiber für Go: Vollständiges Tutorial mit Beispielen
Kryptographie in C++: Verschlüsselung und Hashes mit OpenSSL und Crypto++
Swagger/OpenAPI-Generierung für Node.js (JavaScript): Tools und Beispiele