Analysera ett datum från en sträng

C++:
Analysera ett datum från en sträng

Hur man gör:

I modern C++ kan du använda biblioteket <chrono> för att hantera datum och tider på ett inbyggt sätt, men det stöder inte direkt tolkning från strängar utan manuell bearbetning för mer komplexa format. Dock, för ISO 8601-datumsformat och enkla anpassade format, här är hur du kan åstadkomma tolkningen.

Använda <chrono> och <sstream>:

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

int main() {
    std::string date_str = "2023-04-15"; // ISO 8601-format
    std::istringstream iss(date_str);
    
    std::chrono::year_month_day parsed_date;
    iss >> std::chrono::parse("%F", parsed_date);
    
    if (!iss.fail()) {
        std::cout << "Tolkat datum: " << parsed_date << std::endl;
    } else {
        std::cout << "Misslyckades med att tolka datum." << std::endl;
    }
    
    return 0;
}

Exempelutdata:

Tolkat datum: 2023-04-15

För mer komplexa format eller när man hanterar äldre versioner av C++, är tredjepartsbibliotek som date.h (Howard Hinnants datum-bibliotek) populärt. Så här kan du tolka olika format med det:

Använda date.h-biblioteket: Se till att du har installerat biblioteket. Du kan hitta det här.

#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 << "Tolkat datum: " << parsed_date << std::endl;
    } else {
        std::cout << "Misslyckades med att tolka datum från strängen." << std::endl;
    }

    return 0;
}

Exempelutdata (kan variera beroende på ditt systems lokala inställningar och datuminställningar):

Tolkat datum: 2023-04-15