首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从C代码(Win32)生成RFC1123日期字符串

如何从C代码(Win32)生成RFC1123日期字符串
EN

Stack Overflow用户
提问于 2010-04-28 13:13:42
回答 5查看 2.6K关注 0票数 5

RFC1123定义了许多东西,其中包括在因特网协议中使用的日期格式。RFC1123 (RFC2616)指定必须按照HTTP生成日期格式。

它看起来是这样的:

代码语言:javascript
复制
Date: Wed, 28 Apr 2010 02:31:05 GMT

如何从运行在Windows上的C代码生成RFC1123时间字符串?我没有使用C#和DateTime.ToString()。

我知道我可以自己编写代码,以发出时区和日期缩写,但我希望Windows API中已经存在这一点。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-28 13:56:35

这是我使用的:

代码语言:javascript
复制
static const char *DAY_NAMES[] =
  { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
static const char *MONTH_NAMES[] =
  { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

char *Rfc1123_DateTimeNow()
{
    const int RFC1123_TIME_LEN = 29;
    time_t t;
    struct tm tm;
    char * buf = malloc(RFC1123_TIME_LEN+1);

    time(&t);
    gmtime_s(&tm, &t);

    strftime(buf, RFC1123_TIME_LEN+1, "---, %d --- %Y %H:%M:%S GMT", &tm);
    memcpy(buf, DAY_NAMES[tm.tm_wday], 3);
    memcpy(buf+8, MONTH_NAMES[tm.tm_mon], 3);

    return buf;
}
票数 9
EN

Stack Overflow用户

发布于 2010-04-28 13:25:33

这是未经测试的,但应该相当接近:

代码语言:javascript
复制
time_t t = time(NULL);
struct tm *my_tm = gmtime(&t);
strftime(buffer, buf_size, "%a, %d %b %Y %H:%M:%S GMT", my_tm);
puts(buffer);
票数 2
EN

Stack Overflow用户

发布于 2010-04-28 13:30:18

可能是来自Wininet API的InternetTimeFromSystemTime

使用的

RFC格式。目前,唯一有效的格式是INTERNET_RFC1123_FORMAT.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2726975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档