您是否了解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")
谢谢您
您是否了解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")
谢谢您
在C语言中,有两种常见的方法:
使用支持的格式数组以strptime()方法处理。
频繁敲头撞桌子,然后要么放弃,要么转向已经有可用库的其他语言(例如Perl或Python)。
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;
}
很遗憾,标准库中唯一的东西是由POSIX定义而非C标准的getdate()
。它可以处理许多时间格式,但您需要事先知道格式,而不能只将通用字符串传递给函数。
如果这对您有影响,它在Visual C++上也没有支持。然而,GNU C运行时支持此例程。
approxidate_careful()
函数。我有点晚了,但是根据Mark Lodato发布的内容,我把这个东西做出来了:git's approxidate in library form。在Linux/Mac上测试过。
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”,不需要星期一,在我的德语计算机上也不需要th,但这可能取决于区域设置。单词必须使用本地语言,例如,在英语系统上需要“June”,但在德语系统上需要“Juni”。
// 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)
notmuch邮件项目具有适用于日期字符串的GPLv2+解析器。它支持各种用户友好格式的绝对日期和相对日期,尽管相对日期仅指过去。代码位于notmuch源代码树中的parse-time-string子目录中。