Arbeiten mit Datum und Uhrzeit in C++: Vollständiger Leitfaden

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 der Klassik bis zum modernen Standard



Die Verwaltung von Datum und Zeit ist eine der wichtigsten Aufgaben in der Softwareentwicklung. Ob es um die Protokollierung von Ereignissen, die Berechnung von Fristen, die Arbeit mit Timern oder die Datenanalyse geht – ohne zuverlässige Werkzeuge kommt man nicht aus. In C++ gibt es dafür mehrere Ansätze: von der klassischen Bibliothek <ctime> bis zum modernen <chrono>, das in C++11 eingeführt und in C++20 erheblich erweitert wurde. In diesem Artikel werden wir die grundlegenden Methoden zur Arbeit mit Datum und Zeit erläutern, praktische Beispiele geben und zeigen, wie man typische Fehler vermeidet.



1. Der klassische Ansatz: Die Bibliothek <ctime>



Die Bibliothek <ctime> stammt aus der Sprache C. Sie bietet einfache, aber begrenzte Mittel zur Arbeit mit der Kalenderzeit. Die wichtigsten Typen sind: std::time_t (eine ganze Zahl von Sekunden seit dem 1. Januar 1970) und std::tm (eine Struktur mit den Feldern Jahr, Monat, Tag, Stunden, Minuten, Sekunden usw.).



Beispiel 1: Aktuelle Zeit abrufen und formatieren



#include <iostream>#include <ctime>

int main() { // Aktuelle Zeit abrufen std::time_t now = std::time(nullptr); // In lokale Zeit umwandeln std::tm* local = std::localtime(&now); // Im Format "JJJJ-MM-TT SS:MM:SS" ausgeben char buffer[80]; std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local); std::cout << "Aktuelle Zeit: " << buffer << std::endl; return 0;}


Wichtige Funktionen von <ctime>:

  • std::time() — gibt die aktuelle Kalenderzeit zurück.
  • std::localtime() — wandelt time_t in eine tm-Struktur um, die die Ortszeit darstellt.
  • std::gmtime() — dasselbe, aber für UTC (koordinierte Weltzeit).
  • std::mktime() — die umgekehrte Umwandlung: von tm zu time_t.
  • std::difftime() — berechnet die Differenz in Sekunden zwischen zwei Zeitpunkten.
  • std::strftime() — formatiert Datum und Zeit nach einem vorgegebenen Muster in einen String.


Nachteile: Die Bibliothek berücksichtigt keine Zeitzonen (außer Ortszeit und UTC), unterstützt keine hohe Genauigkeit (nur Sekunden), und die tm-Struktur ist nicht typsicher (z. B. wird das Jahr ab 1900 gezählt, der Monat von 0 bis 11).



2. Der moderne Standard: Die Bibliothek <chrono> (C++11 und neuer)



Ab C++11 wurde der Standardbibliothek <chrono> hinzugefügt – eine typsichere und hochpräzise Bibliothek für die Arbeit mit Zeit. Sie arbeitet mit drei grundlegenden Konzepten: Dauer (duration), Zeitpunkt (time_point) und Uhr (clock).



Uhrentypen:

  • std::chrono::system_clock — Systemzeit, an den Kalender gebunden (kann in time_t umgewandelt werden).
  • std::chrono::steady_clock — monotone Uhr, ideal zum Messen von Intervallen (nicht anfällig für Korrekturen).
  • std::chrono::high_resolution_clock — Uhr mit der höchstmöglichen Auflösung (oft ein Synonym für steady_clock).


Beispiel 2: Messen der Ausführungszeit einer Operation



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

int main() { // Startzeit notieren auto start = std::chrono::steady_clock::now(); // Arbeit simulieren std::this_thread::sleep_for(std::chrono::milliseconds(500)); // Endzeit notieren auto end = std::chrono::steady_clock::now(); // Differenz berechnen auto duration = end - start; // Dauer in Millisekunden ausgeben auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(duration); std::cout << "Ausführungszeit: " << ms.count() << " ms" << std::endl; return 0;}


Vorteile von <chrono>: Typsicherheit (Sie können keine Stunden zu Sekunden addieren, ohne eine explizite Konvertierung), hohe Genauigkeit (Nanosekunden, Mikrosekunden, Millisekunden usw.), Unterstützung für verschiedene Uhren und die Möglichkeit, eigene Dauertypen zu definieren.

Blogs

Buchempfehlungen