Calcolo di una data futura o passata

C++:
Calcolo di una data futura o passata

Come fare:

Ecco un esempio su come aggiungere giorni a una data o sottrarli usando le funzionalità della libreria <chrono> di C++20:

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

using namespace std;
using namespace chrono;

int main() {
    system_clock::time_point oggi = system_clock::now();
    date::year_month_day data_oggi = date::year_month_day{floor<days>(oggi)};
    
    days giorni_da_aggiungere{10};
    date::year_month_day data_futura = data_oggi + giorni_da_aggiungere;

    days giorni_da_sottrarre{10};
    date::year_month_day data_passata = data_oggi - giorni_da_sottrarre;

    cout << format("Data oggi: {}\n", data_oggi);
    cout << format("Data futura (+10 giorni): {}\n", data_futura);
    cout << format("Data passata (-10 giorni): {}\n", data_passata);
}

Output:

Data oggi: 2023-04-12
Data futura (+10 giorni): 2023-04-22
Data passata (-10 giorni): 2023-04-02

Approfondimento

Storicamente, le operazioni con le date in C++ erano complicate e coinvolgevano molte conversioni manuali e attenzione ai dettagli per gestire correttamente anni bisestili, fusi orari eccetera. Con l’introduzione della libreria <chrono> e le estensioni della C++20, calcolare date è diventato molto più semplice.

Alternativamente, libreria di terze parti come Boost.Date_Time offrivano funzionalità simili, ma grazie agli ultimi aggiornamenti del linguaggio, queste stanno diventando meno necessarie.

Per calcolare una data nel futuro/presente, sfruttiamo system_clock::time_point per ottenere la data corrente e la convertiamo in year_month_day. Poi, aggiungiamo o togliamo days per ottenere una nuova data, senza dover calcolare manualmente eventuali sovrapposizioni di mesi o anni.

Vedi anche