Analizando una fecha a partir de una cadena de texto

C++:
Analizando una fecha a partir de una cadena de texto

Cómo:

En C++ moderno, puedes utilizar la biblioteca <chrono> para manejar fechas y horas de manera nativa, pero no admite directamente el análisis desde cadenas sin un análisis manual para formatos más complejos. Sin embargo, para formatos de fecha ISO 8601 y formatos personalizados simples, aquí te mostramos cómo puedes lograr el análisis.

Usando <chrono> y <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 << "Fecha analizada: " << parsed_date << std::endl;
    } else {
        std::cout << "Error al analizar la fecha." << std::endl;
    }
    
    return 0;
}

Salida de muestra:

Fecha analizada: 2023-04-15

Para formatos más complejos o cuando se trata con versiones anteriores de C++, las bibliotecas de terceros como date.h (la biblioteca de fecha de Howard Hinnant) son populares. Aquí te mostramos cómo puedes analizar varios formatos con ella:

Usando la biblioteca date.h: Asegúrate de tener instalada la biblioteca. Puedes encontrarla aquí.

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

int main() {
    std::string date_str = "Abril 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 << "Fecha analizada: " << parsed_date << std::endl;
    } else {
        std::cout << "Error al analizar la fecha a partir de la cadena." << std::endl;
    }

    return 0;
}

Salida de muestra (puede variar dependiendo de la configuración de localidad y fecha de tu sistema):

Fecha analizada: 2023-04-15