Analisi di una data da una stringa

C++:
Analisi di una data da una stringa

Come fare:

Nel C++ moderno, è possibile utilizzare la libreria <chrono> per gestire date e orari nativamente, ma questa non supporta direttamente l’analisi da stringhe senza un parsing manuale per formati più complessi. Tuttavia, per i formati di data ISO 8601 e formati personalizzati semplici, ecco come è possibile eseguire il parsing.

Utilizzando <chrono> e <sstream>:

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

int main() {
    std::string date_str = "2023-04-15"; // formato ISO 8601
    std::istringstream iss(date_str);
    
    std::chrono::year_month_day parsed_date;
    iss >> std::chrono::parse("%F", parsed_date);
    
    if (!iss.fail()) {
        std::cout << "Data analizzata: " << parsed_date << std::endl;
    } else {
        std::cout << "Analisi della data fallita." << std::endl;
    }
    
    return 0;
}

Esempio di output:

Data analizzata: 2023-04-15

Per formati più complessi o quando si lavora con versioni più vecchie di C++, le librerie di terze parti come date.h (la libreria di date di Howard Hinnant) sono popolari. Ecco come è possibile analizzare vari formati con essa:

Utilizzando la Libreria date.h: Assicurati di avere la libreria installata. Puoi trovarla qui.

#include "date/date.h"
#include <iostream>

int main() {
    std::string date_str = "April 15, 2023";
    
    std::istringstream iss(date_str);
    date::sys_days parsed_date;
    iss >> date::parse("%B %d, %Y", parsed_date);
    
    if (!iss.fail()) {
        std::cout << "Data analizzata: " << parsed_date << std::endl;
    } else {
        std::cout << "Analisi della data da stringa fallita." << std::endl;
    }

    return 0;
}

Esempio di output (può variare a seconda delle impostazioni locali e della data del tuo sistema):

Data analizzata: 2023-04-15