Kalender und Zeitzonen
C++20-Kalendertypen verwenden
Kalender und Zeitzonen ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Kalendertypen in C++20
C++20 hat <chrono> um eine umfangreiche Kalenderunterstützung erweitert. Sie können Jahre, Monate und Tage nun direkt als Typen ausdrücken, statt mit Ganzzahlen zu hantieren.
year,month,dayyear_month_dayfür ein vollständiges Datum
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year y{2026};
std::cout << "Year value: " << static_cast<int>(y) << '\n';
return 0;
}Kalenderliterale
Kalenderliterale wie 2026y und 15d sowie benannte Monate wie std::chrono::May sorgen dafür, dass Datumsangaben natürlich lesbar sind.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto y = 2026y;
auto d = 15d;
std::cout << static_cast<int>(y) << " / " << static_cast<unsigned>(d) << '\n';
return 0;
}Ein Datum erstellen
Kombinieren Sie die drei Bestandteile mit dem Operator /, um ein year_month_day zu bilden. Die Reihenfolge entspricht Jahr, Monat, Tag.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year_month_day ymd = 2026y/May/30;
std::cout << static_cast<int>(ymd.year()) << "-"
<< static_cast<unsigned>(ymd.month()) << "-"
<< static_cast<unsigned>(ymd.day()) << '\n';
return 0;
}Datumsangaben validieren
Ein year_month_day erkennt, ob es sich um ein gültiges Kalenderdatum handelt. Verwenden Sie ok(), um unmögliche Werte wie den 30. Februar zurückzuweisen.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year_month_day good = 2026y/February/28;
year_month_day bad = 2026y/February/30;
std::cout << std::boolalpha << good.ok() << " " << bad.ok() << '\n';
return 0;
}sys_days
Wandeln Sie ein Datum in sys_days um, eine Anzahl von Tagen seit der Epoche. Dadurch können Sie mit Tagen rechnen und die Differenz zwischen Datumsangaben ermitteln.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
sys_days a = sys_days{2026y/May/30};
sys_days b = sys_days{2026y/May/20};
std::cout << "Days apart: " << (a - b).count() << '\n';
return 0;
}Mit Tagen rechnen
Wenn Sie days{n} zu einem sys_days addieren, bewegen Sie sich um n Tage vorwärts. Anschließend können Sie wieder in ein Kalenderdatum umwandeln.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
sys_days start = sys_days{2026y/May/30};
sys_days later = start + days{10};
year_month_day ymd = later;
std::cout << static_cast<unsigned>(ymd.day()) << "/"
<< static_cast<unsigned>(ymd.month()) << '\n';
return 0;
}Wochentag
Wandeln Sie ein sys_days in einen weekday um, um den Wochentag eines Datums zu ermitteln.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
weekday wd{sys_days{2026y/May/30}};
std::cout << "Weekday index (Sun=0): " << wd.c_encoding() << '\n';
return 0;
}Letzter Tag eines Monats
Das spezielle last-Tag berechnet den letzten Tag eines beliebigen Monats und berücksichtigt Schaltjahre automatisch.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year_month_day_last eom = 2024y/February/last;
year_month_day ymd = eom;
std::cout << "Feb 2024 ends on day " << static_cast<unsigned>(ymd.day()) << '\n';
return 0;
}Schaltjahr prüfen
Der Typ year stellt is_leap() bereit, sodass Sie sich die Regeln zur Teilbarkeit nicht selbst merken müssen.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
std::cout << std::boolalpha;
std::cout << "2024 leap: " << year{2024}.is_leap() << '\n';
std::cout << "2026 leap: " << year{2026}.is_leap() << '\n';
return 0;
}Von einem Zeitpunkt zu einem Datum
Runden Sie einen system_clock-Zeitpunkt auf days ab und wandeln Sie ihn in ein year_month_day um, um das heutige Kalenderdatum zu erhalten.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto today = floor<days>(system_clock::now());
year_month_day ymd = sys_days{today};
std::cout << "Year is in range: " << (static_cast<int>(ymd.year()) > 2000) << '\n';
return 0;
}Zeitzonen
C++20 fügt über std::chrono::zoned_time und die IANA-Datenbank außerdem Zeitzonen hinzu. Die Verfügbarkeit hängt von Ihrer Standardbibliothek ab. Das Modell verbindet einen Zeitpunkt mit einer benannten Zeitzone, um die Ortszeit korrekt anzuzeigen.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto now = system_clock::now();
auto days_part = floor<days>(now);
std::cout << "Have a UTC time point: " << (days_part.time_since_epoch().count() > 0) << '\n';
return 0;
}Kurzer Check
Prüfen Sie Ihr Verständnis der Kalendertypen von C++20.
Zusammenfassung
Sie haben die Kalenderunterstützung von C++20 kennengelernt:
year,month,dayundyear_month_daymit dem/-Builder- Validierung mit
ok()und Prüfung mitis_leap() sys_daysfür Berechnungen mit Tagen und die Ermittlung des Wochentagslastfür das Monatsende sowie eine Einführung inzoned_time
Damit ist der Kurs „Zeit und die Chrono-Bibliothek“ abgeschlossen.
Häufig gestellte Fragen
Ist die Lektion „Kalender und Zeitzonen“ kostenlos?
Ja — der vollständige Text von „Kalender und Zeitzonen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Kalender und Zeitzonen“?
C++20-Kalendertypen verwenden Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Kalender und Zeitzonen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Dauern und Uhren
- Zeitpunkte
- Code-Performance messen
- Kalender und Zeitzonen