是否知道c的日期解析功能。我正在寻找类似的东西:
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")
谢谢
答案 0 :(得分:11)
C中有两种相当常见的方法:
将strptime()与您接受的支持格式数组一起使用。
猛烈抨击桌子,然后放弃或使用另一种已经有可用库的语言(如perl或python)。
答案 1 :(得分:5)
如果格式一致,您可以使用scanf
家庭功能
#include<stdio.h>
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;
}
答案 2 :(得分:3)
不幸的是,标准库中唯一的东西是getdate()
,由POSIX定义,而不是C标准。它将处理许多时间格式,但您需要事先知道格式 - 而不仅仅是将通用字符串传递给函数。
Visual C ++也不支持它,如果这对你来说是一个问题。但是,GNU C运行时支持此例程。
答案 3 :(得分:2)
Julian Library完成了你所要求的大部分工作 - 尤其是parsing的工作原理。但是我认为它并没有完全延伸到你的要求(我认为Monday
会把它扔掉; - )。
答案 4 :(得分:2)
Git有一个可移植的date parsing library,在GPLv2下发布。你也许可以使用它。我想你想要approxidate_careful()
。
答案 5 :(得分:1)
我参加派对有点晚了,但是根据马克·洛达托发布的内容,我把它扔到了一起:git's approxidate in library form。在Linux / Mac上测试。
答案 6 :(得分:0)
在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 t n, const char* format, const struct tm* tptr)
维基百科上的
答案 7 :(得分:0)
在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”。
答案 8 :(得分:-1)
notmuch mail project有一个日期字符串的GPLv2 +解析器。它支持各种用户友好格式的绝对日期和相对日期,但相对日期仅指过去。代码位于parse-time-string subdirectory of the notmuch source tree。