Berechnung eines zukünftigen oder vergangenen Datums

C++:
Berechnung eines zukünftigen oder vergangenen Datums

So geht’s:

#include <iostream>
#include <chrono>
#include <iomanip>

int main() {
    using std::chrono::system_clock;
    using std::chrono::duration_cast;
    using std::chrono::hours;
    using std::chrono::time_point_cast;

    // Heutiges Datum erhalten
    auto jetzt = system_clock::now();

    // Datum in 30 Tagen
    auto inDreißigTagen = jetzt + std::chrono::hours(24 * 30);

    // Datum vor 30 Tagen
    auto vorDreißigTagen = jetzt - std::chrono::hours(24 * 30);

    // Zeitpunkte in tm umwandeln
    time_t zeitInDreißig = system_clock::to_time_t(inDreißigTagen);
    time_t zeitVorDreißig = system_clock::to_time_t(vorDreißigTagen);

    // Ausgeben
    std::cout << "Heute: " << std::put_time(localtime(&zeit), "%F") << '\n';
    std::cout << "In 30 Tagen: " << std::put_time(localtime(&zeitInDreißig), "%F") << '\n';
    std::cout << "Vor 30 Tagen: " << std::put_time(localtime(&zeitVorDreißig), "%F") << '\n';

    return 0;
}

Output:

Heute: 2023-04-01
In 30 Tagen: 2023-05-01
Vor 30 Tagen: 2023-03-02

Deep Dive

Die <chrono>-Bibliothek kam mit C++11 und revolutionierte die Zeit- und Datumsverwaltung. Zuvor musste man oft auf plattformspezifische API oder externe Bibliotheken wie Boost zurückgreifen. Alternativen sind auch heute noch die C Time-API oder Libraries wie date.h. Bei der Zeitberechnung sollte man auch auf Zeitumstellungen (Sommerzeit) und Schaltjahre achten, was mit <chrono> automatisch passiert.

See Also