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