有谁知道如何从一个 ISO-8601格式化日期/时间字符串到 time_t
?
我正在使用C ++,它需要在Windows和Mac上运行。
我编写了代码,但我确信有一个更“标准”的版本。
我会得到一个日期 2011-03-21 20:25
而且我必须告诉时间是过去还是将来。
有谁知道如何从一个 ISO-8601格式化日期/时间字符串到 time_t
?
我正在使用C ++,它需要在Windows和Mac上运行。
我编写了代码,但我确信有一个更“标准”的版本。
我会得到一个日期 2011-03-21 20:25
而且我必须告诉时间是过去还是将来。
我认为一个丑陋的黑客很有趣:因为你只想确定哪个日期/时间更大,你可以将日期转换为字符串并比较字符串。 ;-)(好处是你不需要strptime,这在任何地方都无法获得。)
#include <string.h>
#include <time.h>
int main(int argc, char *argv[])
{
const char *str = "2011-03-21 20:25";
char nowbuf[100];
time_t now = time(0);
struct tm *nowtm;
nowtm = localtime(&now);
strftime(nowbuf, sizeof(nowbuf), "%Y-%m-%d %H:%M", nowtm);
if (strncmp(str, nowbuf, strlen(str)) >= 0) puts("future"); else puts("past");
return 0;
}
您可以使用 strptime
从字符串转换为 struct tm
,然后你可以使用 mktime
从...转换 struct tm
到了 time_t
。例如:
// Error checking omitted for expository purposes
const char *timestr = "2011-03-21 20:25";
struct tm t;
strptime(timestr, "%Y-%m-%d %H:%M", &t);
time_t t2 = mktime(&t);
// Now compare t2 with time(NULL) etc.