如何将 C 字符串中的值解析为结构时间规范

  • 本文关键字:结构 时间 字符串 c linux
  • 更新时间 :
  • 英文 :


我的程序将接收Wed, 21 Oct 2015 07:28:00 GMT格式的C字符串输入,例如

char * date = "Wed, 21 Oct 2015 07:28:00 GMT"

如何将其转换为结构时间规范,以便我可以与 stat() 函数返回的st_atim、st_mtim 和st_ctimstruct timespec进行比较?

这篇文章讨论了strptime和sscanf,我也发现了strftime,但所有这些都转换为struct time_tstruct tm或整数值。

看看timespec的定义:

struct timespec
{
time_t tv_sec;  // Seconds
long   tv_nsec; // Nanoseconds
};

因此,它只不过是一个具有额外纳秒数的time_t

像你展示的字符串(Wed, 21 Oct 2015 07:28:00 GMT)甚至没有比秒更精细的东西,所以纳秒几乎无关紧要,你可以把它解析成一个进入tv_sectime_t,并将tv_nsec设置为零。

顺便说一下,您显示的格式很可能基于 RFC 822/RFC 1123/RFC 2822 中概述的规范。这应该使搜索解析它的代码变得更加容易,例如这个。这也被非正式地称为"HTTP date",因为它在 HTTP 标头中使用。事实上,libcurl 有一个解析它的函数curl_getdate。你可以在这里看到它的C源代码。

例:

#include <curl/curl.h>
timespec ts = {0};
ts.tv_sec = curl_getdate(inputString, NULL);

除非你已经在其他地方使用了libcurl,否则这可能是不必要的大开销,但你可以把它当作灵感,或者寻找其他能给你一个time_t的解析方法。

最新更新