如何在C++中将ISO 8601字符串转换为time_t?

rez*_*eza 11 c++ time iso time-t

有谁知道如何从ISO-8601格式化的日期/时间字符串到time_t?我使用的是C++,它需要在Windows和Mac上运行.

我已经编写了代码,但我确信有一个更"标准"的版本.

我会得到一个类似的日期2011-03-21 20:25,我必须告诉时间是过去还是未来.

Mor*_*gil 7

我认为一个丑陋的黑客很有趣:因为您只想确定哪个日期/时间更大,您可以将日期转换为字符串并比较字符串.;-)(好处是你不需要在任何地方都没有的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;
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然我本能地畏缩于这样的想法......这就是"YYYYMMDD HHMMSS"格式的重点 - ascii比较实际上是有效的.当然,风险在于他将来会以不同的格式开始约会. (3认同)

Ada*_*eld 6

您可以使用strptime从字符串转换为a struct tm,然后您可以使用mktime从a转换struct tm为a 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.
Run Code Online (Sandbox Code Playgroud)

  • strptime不是标准的c.它可以在Windows上使用吗? (2认同)