C++将字符串日期(1/4/2000)转换为int日期(20000104)
我可以编写一个函数来解析字符串日期,但我觉得我在这里重新发明轮子。是否有一种更快的,也许是内置的C++方式从这个格式的字符串日期中得到:1/4/2000到更容易使用的int(比如20000104?< p/>> p>标准库函数是,但是不确定C++中的被清理的程度。” 如果您对strtime没有意见,下面是您将如何在案例中使用它:C++将字符串日期(1/4/2000)转换为int日期(20000104),c++,string,date,data-conversion,C++,String,Date,Data Conversion,我可以编写一个函数来解析字符串日期,但我觉得我在这里重新发明轮子。是否有一种更快的,也许是内置的C++方式从这个格式的字符串日期中得到:1/4/2000到更容易使用的int(比如20000104?< p/>> p>标准库函数是,但是不确定C++中的被清理的程度。” 如果您对strtime没有意见,下面是您将如何在案例中使用它: struct tm when; strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check ret
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;相关的角似乎是.标准库函数是,不确定C++中的“干净”,但是 如果您对strtime没有意见,下面是您将如何在案例中使用它:
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;相关的角似乎是.除非你需要你的内置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*年+100*月+日的任务。如果你没有绑定到那个精确的值,你只需要一个正确的整数,那么你可以看看你的平台是否有一个函数告诉你所谓的朱利安日。< P>除非你需要你的内置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*年+100*月+日的任务。如果你不执着于这个精确的值,你只需要一个顺序正确的整数,然后你可以看看你的平台是否有功能告诉你所谓的朱利安日。a最近被问到。20000104可能很容易比较或排序,但对于任何算术…a最近被问到。20000104可能很容易比较或排序,但对于任何算术…我不熟悉strTime,是否可以提供一个可以处理我的案例的示例,以便我和其他有类似问题的人可以看到它是如何工作的?我认为相关的Boost文档是有用的。POSIX时间假设输入已经是ISO格式,即第一年。StrutTimes具有POSIX的令人兴奋的属性,但不是标准C++或标准C.C++。它有一个名为TimeIGET的区域类别,它解析相同的格式,但我从未使用过它,所以我不能轻易地写出一个例子。tm_year没有正确地获取年份。我不熟悉strtime,是否可以提供一个可以处理我的案例的示例,以便我和其他有类似问题的人可以看到它是如何工作的?我认为相关的Boost文档非常有用。POSIX时间假设输入已经是ISO格式,即第一年。StrutTimes具有POSIX的令人兴奋的属性,但不是标准C++或标准C.C++。它有一个名为TimeIGET的区域类别,它解析相同的格式,但我从未使用过它,所以我不能轻易地写出一个例子。tm_year无法正确获取年份。