用于解析日期时间的C库

是否知道c的日期解析function。 我正在寻找类似的东西:

time = parse_time("9/10/2009"); printf("%d\n", time->date); time2 = parse_time("Monday September 10th 2009") time2 = parse_time("Monday September 10th 2009 12:30 AM") 

谢谢

朱利安图书馆完成了你所要求的大部分工作 – 特别是看它的解析是如何工作的。 但是我认为它并没有完全延伸到你的要求(我认为Monday会抛出它来旋转;-)。

C中有两种相当常见的方法:

  1. 将strptime()与您接受的支持格式数组一起使用。

  2. Bang很多人反对表,然后放弃或使用另一种已经有可用库的语言(如perl或python)。

如果格式一致,则可以使用scanf系列函数

 #include int main() { char *data = "Tue, 13 Dec 2011 16:08:21 GMT"; int h, m, s, d, Y; char M[4]; sscanf(data, "%*[a-zA-Z,] %d %s %d %d:%d%:%d", &d, M, &Y, &h, &m, &s); return 0; } 

不幸的是,标准库中唯一的东西是由POSIX定义的getdate() ,而不是C标准。 它将处理许多时间格式,但您需要事先知道格式 – 而不仅仅是将通用字符串传递给函数。

它也不支持Visual C ++,如果这对你来说是一个问题。 但是,GNU C运行时支持此例程。

Git有一个可移植的日期解析库 ,在GPLv2下发布。 你也许可以使用它。 我想你想要approxidate_careful()

我参加派对有点晚了,但是基于马克·洛达托发布的内容,我把它们放在一起: git在图书馆forms上很接近 。 在Linux / Mac上测试过。

在time.h你有strptime:

 // Scan values from buf string into tptr struct. On success it returns pointer // to the character following the last character parsed. Otherwise it returns null. char * strptime(const char* buf, const char* format, struct tm* tptr) 

与之相反

 // Format tm into a date/time string. size t strftime(char* s, size tn, const char* format, const struct tm* tptr) 

点击此处查看维基百科上的完整参考

在Windows中,有VarDateFromStr可以自动解析许多格式,如下所示:

 LPCWSTR dateString = L" DATE result; HRESULT hr = ::VarDateFromStr(dateString, LOCALE_ALL, 0, &result); if (FAILED(hr)) { /* handle error */ /* DISP_E_TYPEMISMATCH means that it didn't recognize the format. */ } 

它通常会识别数字格式,但也可以解析“2009年9月10日上午12:30”,没有星期一 ,也可以解析我的德语电脑,但这可能与语言环境无关。 单词必须使用当地语言,例如,英语系统需要“June”,德语系统需要“Juni”。

这个不太好的邮件项目有一个日期字符串的GPLv2 +解析器。 它支持各种用户友好格式的绝对日期和相对日期,但相对日期仅指过去。 代码位于notmuch源树的parse-time-string子目录中 。