Beregning av en dato i fremtiden eller fortiden

C++:
Beregning av en dato i fremtiden eller fortiden

How to:

Med C++20 kan vi bruke <chrono> biblioteket for å regne ut datoer enkelt. Her er hvordan:

#include <iostream>
#include <chrono>
#include <format>
#include <calendar>

using namespace std::chrono; // Bare for å gjøre eksemplene renere

int main() {
    // Få dagens dato ved å bruke system_clock
    auto today = std::chrono::floor<days>(system_clock::now());
    year_month_day ymd = today;
    
    // Regne ut en dato 30 dager frem i tid
    year_month_day future_date = ymd + days{30};
    
    // Regne ut en dato 30 dager i fortiden
    year_month_day past_date = ymd - days{30};

    // Vis resultatene
    std::cout << std::format("I dag: {}\n", ymd)
              << std::format("Dato 30 dager framover: {}\n", future_date)
              << std::format("Dato 30 dager tilbake: {}\n", past_date);

    return 0;
}

Forventet utskrift kan se slik ut:

I dag: 2023-04-15
Dato 30 dager framover: 2023-05-15
Dato 30 dager tilbake: 2023-03-16

Deep Dive:

Før <chrono> biblioteket, var det mer vanlig å bruke C-funksjoner som mktime og localtime fra <ctime> eller egne biblioteker som Boost.Date_Time. Disse metoden var ofte mer klønete og feilutsatte.

C++20 gjorde dato- og tidsberegninger mer robust med <chrono>. Det gir oss typesikkerhet og forhindrer vanlige feil som å forveksle millisekunder med mikrosekunder eller å håndtere sommertid feil.

Implementasjonsdetaljer i <chrono> biblioteket håndterer også komplikasjoner som skuddår og kalenderendringer. Dette bidrar til at vi unngår fallgruver vi ofte støter på med manuell databehandling, og følger beste praksis med tidssoner og UTC.

See Also: