Arbeiten mit Datum und Uhrzeit in C++: vollständiger Leitfaden zu chrono

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 Datum und Zeit in C++: von <ctime> bis zum modernen <chrono>



Arbeiten mit Datum und Zeit ist eine der zentralen Aufgaben in jeder ernsthaften Anwendung: von Logs und Backups bis hin zu Timern und Finanzberechnungen. In C++ haben sich historisch zwei Ansätze entwickelt: der klassische C-Stil über die Header-Datei <ctime> und der moderne, typsichere Ansatz über die Bibliothek <chrono>, die in C++11 eingeführt und in C++20 erheblich erweitert wurde. In diesem Artikel werden wir beide Methoden behandeln, lernen, wie man die aktuelle Zeit erhält, Intervalle misst, Daten formatiert und typische Fehler vermeidet.



1. Der klassische Weg: <ctime> und std::time_t



Vor C++11 waren die einzigen Standardmethoden zur Arbeit mit Zeit die Funktionen aus C: time(), localtime(), strftime(). Dieser Ansatz wird bis heute in Legacy-Code und einfachen Aufgaben verwendet.



Aktuelle Zeit abrufen

Die Funktion std::time(nullptr) gibt die Anzahl der Sekunden seit dem 1. Januar 1970 (Unix-Epoche) als Ganzzahl std::time_t zurück.



#include <iostream>#include <ctime>

int main() { std::time_t now = std::time(nullptr); std::cout << "Aktuelle Zeit (Sekunden seit Epoche): " << now << std::endl; return 0;}


Umwandlung in ein lesbares Format

Um eine Struktur mit Komponenten (Jahr, Monat, Tag, Stunden usw.) zu erhalten, verwenden Sie std::localtime() oder std::gmtime().



#include <iostream>#include <ctime>

int main() { std::time_t now = std::time(nullptr); std::tm* local = std::localtime(&now);

std::cout << "Jahr: " << (local->tm_year + 1900) << std::endl; std::cout << "Monat: " << (local->tm_mon + 1) << std::endl; std::cout << "Tag: " << local->tm_mday << std::endl; return 0;}


Formatierung eines Strings mit strftime

Die Funktion std::strftime() ermöglicht es, ein Datum flexibel nach einem bestimmten Muster in einen String zu formatieren.



#include <iostream>#include <ctime>

int main() { std::time_t now = std::time(nullptr); std::tm* local = std::localtime(&now);

char buffer[80]; std::strftime(buffer, sizeof(buffer), "%d.%m.%Y %H:%M:%S", local); std::cout << "Aktuelles Datum und Uhrzeit: " << buffer << std::endl; return 0;}


⚠️ Wichtig: std::localtime() und std::gmtime() geben einen Zeiger auf einen statischen Puffer zurück – dies ist nicht threadsicher. In C++11 sind die reentranten Versionen localtime_s (Windows) oder localtime_r (POSIX) verfügbar.



2. Modernes C++: Die Bibliothek <chrono>



Die Bibliothek <chrono> bietet strenge Typisierung, Arbeit mit verschiedenen Zeiteinheiten und hohe Genauigkeit. Die Hauptkomponenten sind:

  • Uhren (clocks): system_clock, steady_clock, high_resolution_clock
  • Zeitpunkte (time_point): Bindung an einen bestimmten Moment
  • Dauern (duration): Zeitintervalle (Sekunden, Millisekunden usw.)


Aktuellen Zeitpunkt abrufen

#include <iostream>#include <chrono>#include <ctime> // für std::time_t

int main() { auto now = std::chrono::system_clock::now(); std::time_t now_time = std::chrono::system_clock::to_time_t(now); std::cout << "Aktuelle Zeit: " << std::ctime(&now_time); return 0;}


Messen von Zeitintervallen (Timer)

Eine der häufigsten Aufgaben ist das Messen der Ausführungszeit von Code. Dafür eignet sich perfekt

Blogs

Buchempfehlungen