Analisando uma data a partir de uma string

C++:
Analisando uma data a partir de uma string

Como Fazer:

No C++ moderno, você pode usar a biblioteca <chrono> para manipular datas e horas nativamente, mas ela não suporta diretamente a análise de strings sem um parsing manual para formatos mais complexos. No entanto, para formatos de data ISO 8601 e formatos customizados simples, aqui está como você pode realizar a análise.

Usando <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 data_analisada;
    iss >> std::chrono::parse("%F", data_analisada);
    
    if (!iss.fail()) {
        std::cout << "Data analisada: " << data_analisada << std::endl;
    } else {
        std::cout << "Falha ao analisar a data." << std::endl;
    }
    
    return 0;
}

Saída de exemplo:

Data analisada: 2023-04-15

Para formatos mais complexos ou ao lidar com versões mais antigas do C++, bibliotecas de terceiros como date.h (biblioteca de data de Howard Hinnant) são populares. Aqui está como você pode analisar vários formatos com ela:

Usando a Biblioteca date.h: Certifique-se de ter a biblioteca instalada. Você pode encontrá-la aqui.

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

int main() {
    std::string date_str = "April 15, 2023";
    
    std::istringstream iss(date_str);
    date::sys_days data_analisada;
    iss >> date::parse("%B %d, %Y", data_analisada);
    
    if (!iss.fail()) {
        std::cout << "Data analisada: " << data_analisada << std::endl;
    } else {
        std::cout << "Falha ao analisar data da string." << std::endl;
    }

    return 0;
}

Saída de exemplo (pode variar dependendo da localização do sistema e das configurações de data):

Data analisada: 2023-04-15