1

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

4

2 回答 2

3

除非您还需要内置的 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为您做的。如果你不拘泥于那个确切的值,你只想要一个正确顺序的整数,那么你可以看看你的平台是否有一个功能来告诉你所谓的“儒略日”。

于 2013-01-29T11:15:24.373 回答
2

标准库函数是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

于 2013-01-29T10:19:00.390 回答