如何从C代码(Win32)生成RFC1123 Date字符串

Che*_*eso 5 windows winapi

RFC1123定义了许多内容,其中包括要在互联网协议中使用的日期格式.HTTP(RFC2616)指定必须按照RFC1123生成日期格式.

它看起来像这样:

Date: Wed, 28 Apr 2010 02:31:05 GMT
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Che*_*eso 9

这是我用过的:

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;
}
Run Code Online (Sandbox Code Playgroud)