从字符串解析日期

C++:
从字符串解析日期

如何做:

在现代C++中,你可以使用<chrono>库来本地处理日期和时间,但它不直接支持从字符串解析,对于更复杂的格式需要手动解析。然而,对于ISO 8601日期格式和简单的自定义格式,下面是你可以实现解析的方法。

使用<chrono><sstream>

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

int main() {
    std::string date_str = "2023-04-15"; // 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 << "解析的日期: " << parsed_date << std::endl;
    } else {
        std::cout << "解析日期失败。" << std::endl;
    }
    
    return 0;
}

示例输出:

解析的日期: 2023-04-15

对于更复杂的格式或处理旧版C++版本时,像date.h(Howard Hinnant的日期库)这样的第三方库很受欢迎。以下是如何使用它解析各种格式:

使用date.h库: 确保你已经安装了库。你可以在这里找到它。

#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 << "解析的日期: " << parsed_date << std::endl;
    } else {
        std::cout << "从字符串解析日期失败。" << std::endl;
    }

    return 0;
}

示例输出(可能根据您的系统区域设置和日期设置而有所不同):

解析的日期: 2023-04-15