0Pricing
C++ Academy · Lektion

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, day
  • year_month_day fü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, day und year_month_day mit dem /-Builder
  • Validierung mit ok() und Prüfung mit is_leap()
  • sys_days für Berechnungen mit Tagen und die Ermittlung des Wochentags
  • last für das Monatsende sowie eine Einführung in zoned_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

  1. Dauern und Uhren
  2. Zeitpunkte
  3. Code-Performance messen
  4. Kalender und Zeitzonen
← Zurück zu C++ Academy