Tulevaisuuden tai menneisyyden päivämäärän laskeminen

C++:
Tulevaisuuden tai menneisyyden päivämäärän laskeminen

How to: (Kuinka tehdä:)

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

int main() {
    using namespace std::chrono;

    // Tämän päivän päivämäärä
    system_clock::time_point today = system_clock::now();
    
    // Muutetaan aika time_t:ksi tulostusta varten
    time_t t = system_clock::to_time_t(today);
    std::cout << "Tänään on: " << std::put_time(std::localtime(&t), "%F") << '\n';

    // Laske tulevaisuuden päivämäärä lisäämällä 30 päivää
    system_clock::time_point future_date = today + days{30};
    t = system_clock::to_time_t(future_date);
    std::cout << "30 päivän päästä: " << std::put_time(std::localtime(&t), "%F") << '\n';

    // Menneisyyden päivämäärä vähentämällä 30 päivää
    system_clock::time_point past_date = today - days{30};
    t = system_clock::to_time_t(past_date);
    std::cout << "30 päivää sitten: " << std::put_time(std::localtime(&t), "%F") << '\n';

    return 0;
}

Sample output:

Tänään on: 2023-04-07
30 päivän päästä: 2023-05-07
30 päivää sitten: 2023-03-08

Deep Dive (Syvä sukellus):

Maailmassa joukoittain tapoja käsitellä aikaa, mutta C++20 toi standardikirjastoon <chrono> uudistuksia, helpottaen päivämäärien käsittelyä. Historiallisesti C++ käytti <ctime>, joka oli hankala. Esimerkiksi, aikavyöhykkeiden ja karkausvuosien kanssa oli ongelmia.

C++11 esitteli <chrono>, mutta vasta C++20 toi kunnolliset kalenteritoiminnot. Nyt voimme laskea päivämääriä helppokäyttöisesti ja tyypin turvallisesti.

Vaihtoehtoina ovat kolmannen osapuolen kirjastot kuten Boost.Date_Time. Mutta nyt, kun standardikirjasto tarjoaa hyvät välineet, ulkopuolisten kirjastojen tarve vähenee.

See Also (Katso myös):