Datums- und Zeitbibliothek
C++ unterstützt zwei Arten der Zeitmanipulation
- Die
chronoBibliothek, eine flexible Sammlung von Typen, die Zeit mit unterschiedlichen Präzisionen verfolgen (z.B. std::chrono::time_point). - Die C-Stil Datums- und Zeitbibliothek (z.B. std::time).
Inhalt |
[bearbeiten] Chrono Bibliothek (seit C++11)
Die chrono Bibliothek definiert mehrere Haupttypen sowie Hilfsfunktionen und gängige Typedefs
| (seit C++20) |
[bearbeiten] Uhren
Eine Uhr besteht aus einem Startpunkt (oder Epoche) und einer Taktfrequenz. Zum Beispiel kann eine Uhr eine Epoche am 1. Januar 1970 haben und jede Sekunde ticken. C++ definiert mehrere Uhrentypen
| Definiert in Header
<chrono> | |
| Definiert im Namespace
std::chrono | |
| (C++11) |
Systemuhrzeit von der systemweiten Echtzeituhr (Klasse) |
| (C++11) |
monotone Uhr, die niemals verstellt wird (Klasse) |
| (C++11) |
die Uhr mit der kürzesten verfügbaren Taktperiode (Klasse) |
| (C++20) |
bestimmt, ob ein Typ eine Clock ist (Klassen-Template) (Variablen-Template) |
| (C++20) |
Clock für koordinierte Weltzeit (UTC) (Klasse) |
| (C++20) |
Clock für Internationale Atomzeit (TAI) (Klasse) |
| (C++20) |
Clock für GPS-Zeit (Klasse) |
| (C++20) |
Clock für Dateizeit (Typedef) |
| (C++20) |
Pseudo-Uhr, die die Lokalzeit repräsentiert (Klasse) |
[bearbeiten] Zeitpunkt
Ein Zeitpunkt ist eine Zeitdauer, die seit der Epoche einer bestimmten Uhr vergangen ist.
| Definiert in Header
<chrono> | |
| Definiert im Namespace
std::chrono | |
| (C++11) |
Ein Zeitpunkt (Klassen-Template) |
| (C++20) |
Traits-Klasse, die definiert, wie Zeitpunkte einer Uhr in andere umgewandelt werden (Klassen-Template) |
| (C++20) |
wandelt Zeitpunkte einer Uhr in andere um (Funktions-Template) |
[bearbeiten] Dauer
Eine Dauer besteht aus einer Zeitspanne, definiert als eine bestimmte Anzahl von Ticks einer bestimmten Zeiteinheit. Zum Beispiel könnte "42 Sekunden" durch eine Dauer dargestellt werden, die aus 42 Ticks einer 1-Sekunden-Zeiteinheit besteht.
| Definiert in Header
<chrono> | |
| Definiert im Namespace
std::chrono | |
| (C++11) |
Ein Zeitintervall (Klassen-Template) |
[bearbeiten] Tageszeit (seit C++20)
hh_mm_ss teilt eine Dauer, die seit Mitternacht vergangene Zeit repräsentiert, in Stunden, Minuten, Sekunden und Bruchteile von Sekunden auf, je nach Anwendbarkeit. Sie ist primär ein Formatierungswerkzeug.
| Definiert in Header
<chrono> | |
| Definiert im Namespace
std::chrono | |
| (C++20) |
repräsentiert eine Tageszeit (Klassen-Template) |
| (C++20) |
übersetzt zwischen 12h/24h-Format Tageszeiten (Funktion) |
[bearbeiten] Kalender (seit C++20)
| Definiert in Header
<chrono> | |
| Definiert im Namespace
std::chrono | |
| (C++20) |
Tag-Klasse, die den letzten Tag oder Wochentag eines Monats angibt (Klasse) |
| (C++20) |
repräsentiert einen Tag eines Monats (Klasse) |
| (C++20) |
repräsentiert einen Monat eines Jahres (Klasse) |
| (C++20) |
repräsentiert ein Jahr im Gregorianischen Kalender (Klasse) |
| (C++20) |
repräsentiert einen Wochentag im Gregorianischen Kalender (Klasse) |
| (C++20) |
repräsentiert den n-ten weekday eines Monats (Klasse) |
| (C++20) |
repräsentiert den letzten weekday eines Monats (Klasse) |
| (C++20) |
repräsentiert einen bestimmten day eines bestimmten month (Klasse) |
| (C++20) |
repräsentiert den letzten Tag eines bestimmten month (Klasse) |
| (C++20) |
repräsentiert den n-ten weekday eines bestimmten month (Klasse) |
| (C++20) |
repräsentiert den letzten weekday eines bestimmten month (Klasse) |
| (C++20) |
repräsentiert einen bestimmten month eines bestimmten year (Klasse) |
| (C++20) |
repräsentiert ein bestimmtes year, month und day (Klasse) |
| (C++20) |
repräsentiert den letzten Tag eines bestimmten year und month (Klasse) |
| (C++20) |
repräsentiert den n-ten weekday eines bestimmten year und month (Klasse) |
| (C++20) |
repräsentiert den letzten weekday eines bestimmten year und month (Klasse) |
| (C++20) |
konventionelle Syntax für die Erstellung von Kalenderdaten im Gregorianischen Kalender (Funktion) |
[bearbeiten] Zeitzone (seit C++20)
| Definiert in Header
<chrono> | |
| Definiert im Namespace
std::chrono | |
| (C++20) |
beschreibt eine Kopie der IANA-Zeitzonendatenbank (Klasse) |
| (C++20) |
repräsentiert eine verkettete Liste von tzdb (Klasse) |
| greift auf globale Zeitzonendatenbankinformationen zu und steuert diese (Funktion) | |
| (C++20) |
lokalisiert eine time_zone anhand ihres Namens (Funktion) |
| (C++20) |
gibt die aktuelle time_zone zurück (Funktion) |
| (C++20) |
repräsentiert eine Zeitzone (Klasse) |
| (C++20) |
repräsentiert Informationen über eine Zeitzone zu einem bestimmten Zeitpunkt (Klasse) |
| (C++20) |
repräsentiert Informationen über eine Umwandlung von Lokalzeit zu UNIX-Zeit (Klasse) |
| (C++20) |
wählt aus, wie eine mehrdeutige Lokalzeit aufgelöst werden soll (Enum) |
| (C++20) |
Traits-Klasse für Zeitzonenzeiger, die von zoned_time verwendet werden (Klassen-Template) |
| (C++20) |
repräsentiert eine Zeitzone und einen Zeitpunkt (Klasse) |
| (C++20) |
enthält Informationen über eine Schaltsekundeneinfügung (Klasse) |
| (C++20) |
Informationen zur Schaltsekundeneinfügung (Klasse) |
| (C++20) |
erhält Informationen zur Schaltsekundeneinfügung aus einem utc_time-Objekt(Funktions-Template) |
| (C++20) |
repräsentiert einen alternativen Namen für eine Zeitzone (Klasse) |
| (C++20) |
Ausnahme, die geworfen wird, um zu melden, dass eine Lokalzeit nicht existiert (Klasse) |
| (C++20) |
Ausnahme, die geworfen wird, um zu melden, dass eine Lokalzeit mehrdeutig ist (Klasse) |
[bearbeiten] Literale (seit C++14)
| Definiert in Header
<chrono> | |
| Definiert im Inline-Namespace
std::literals::chrono_literals | |
| (C++20) |
ein std::chrono::year Literal, das ein bestimmtes Jahr repräsentiert (Funktion) |
| (C++20) |
ein std::chrono::day Literal, das einen Tag eines Monats repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Stunden repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Minuten repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Sekunden repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Millisekunden repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Mikrosekunden repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Nanosekunden repräsentiert (Funktion) |
[bearbeiten] Chrono E/A (seit C++20)
| Definiert in Header
<chrono> | |
| Definiert im Namespace
std::chrono | |
| (C++20) |
parst ein chrono Objekt aus einem Stream(Funktions-Template) |
[bearbeiten] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_chrono |
201510L |
(C++17) | Rundungsfunktionen für std::chrono::duration und std::chrono::time_point |
201611L |
(C++17) | constexpr für alle Memberfunktionen von std::chrono::duration und std::chrono::time_point | |
201907L |
(C++20) | Kalender und Zeitzonen | |
202306L |
(C++26) | Unterstützung für Hashing für std::chrono Wertklassen |
[bearbeiten] C-Stil Datums- und Zeitbibliothek
Ebenso werden C-Stil Datums- und Zeitfunktionen bereitgestellt, wie z.B. std::time_t, std::difftime und CLOCKS_PER_SEC.
[bearbeiten] Beispiel
#include <chrono> #include <iostream> long Fibonacci(unsigned n) { return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2); } int main() { // Measures and displays an execution time of a function call. const auto start{std::chrono::steady_clock::now()}; const auto fb{Fibonacci(42)}; const auto finish{std::chrono::steady_clock::now()}; const std::chrono::duration<double> elapsed_seconds{finish - start}; std::cout << "Fibonacci(42): " << fb << "\nElapsed time: "; // std::cout << elapsed_seconds.count() << "s\n"; // Before C++20 std::cout << elapsed_seconds << '\n'; // C++20's chrono::duration operator<< // Prints UTC and local time. const auto tp_utc{std::chrono::system_clock::now()}; std::cout << "Current time 'UTC' is: " << tp_utc << "\n" "Current time 'Local' is: " << std::chrono::current_zone()->to_local(tp_utc) << '\n'; }
Mögliche Ausgabe
Fibonacci(42): 267914296 Elapsed time: 0.728532s Current time 'UTC' is: 2025-02-10 06:22:39.420666960 Current time 'Local' is: 2025-02-10 09:22:39.420666960