C++字符串日期 (1/4/2000) 转换为整数日期 (20000104)



我可以编写一个函数来解析字符串日期,但我觉得我在这里重新发明了轮子。有没有一种更快的,也许是内置C++方式从这种格式的字符串日期:1/4/2000 到更易于使用的 int 如 20000104?

除非你也需要内置的C++方法来做验证,否则"明显"的解析是:

int parseDate(const std::string &input) {
    int month;
    int day;
    int year;
    if (std::sscanf(input.c_str(), "%d/%d/%d", &month, &day, &year) != 3) {
        // handle error
    } else {
        // check values to avoid int overflow if you can be bothered
        return 10000 * year + 100 * month + day;
    }
}
如果要

编写几行代码类型安全,则可以使用流提取器而不是sscanf

标准库中肯定没有任何东西可以为您完成10000 * year + 100 * month + day。如果你不执着于这个确切的值,你只需要一个正确顺序的整数,那么你可以看看你的平台是否有一个函数来告诉你所谓的"朱利安日"。

标准库函数是strptime()的,但不确定这在C++中被认为是多"干净"。

如果您对strptime()感到满意,以下是您将如何将其用于您的案例:

struct tm when;
strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check return value.
const int sortable = 10000 * tm.tm_year + 100 * tm.tm_month + tm.tm_day;

当然,如果你愿意,你可以使用Boost;相关的角落似乎是Posix Time。

最新更新