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

Windows 如何从C代码(Win32)生成RFC1123日期字符串,windows,winapi,Windows,Winapi,定义了许多内容,其中包括互联网协议中使用的日期格式。HTTP()指定必须按照RFC1123生成日期格式 看起来是这样的: Date: Wed, 28 Apr 2010 02:31:05 GMT 如何从运行在Windows上的C代码生成RFC1123时间字符串? 我没有使用C#和DateTime.ToString() 我知道我可以自己编写代码,发出时区和日期缩写,但我希望这已经存在于Windows API中 谢谢。这未经测试,但应合理接近: time_t t = time(NULL); stru

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

看起来是这样的:

Date: Wed, 28 Apr 2010 02:31:05 GMT
如何从运行在Windows上的C代码生成RFC1123时间字符串? 我没有使用C#和DateTime.ToString()

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


谢谢。

这未经测试,但应合理接近:

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);
可能是来自Wininet API

使用RFC格式。目前,唯一的 有效格式为 INTERNET\u RFC1123\u格式

这就是我使用的:

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;
}

更广义的例子

std::string rfc1123_datetime( time_t time )
{
    struct tm * timeinfo;
    char buffer [80];

    timeinfo = gmtime ( &time );
    strftime (buffer,80,"%a, %d %b %Y %H:%M:%S GMT",timeinfo);

    return buffer;
}
我用了这个:

char    wd[4], mo[4], dn[3], tm[9], yr[5];
time_t  now;

time(&now);
sscanf(ctime(&now), "%s %s %s %s %s", wd, mo, dn, tm, yr);
sprintf((char*) http_response, "\r\nDate: %s, %s %s %s %s GMTr\n\r\n", wd, dn, mo, yr, tm);

事实上,我使用ctime\r调用是线程安全的,但不管怎样它都能工作…

谢谢。这正是问题所在。但是,您知道吗?对于从服务器应用程序使用wininet.dll,我应该有什么顾虑吗?wininet.dll是否会不存在?例如,如果服务器上没有安装IE,wininet.dll会丢失吗?当然,你需要wininet.dll,但它应该是Windows的一部分。如果您已经实现了自己的,则可能不需要使用它。请注意,此处的
%a
%b
取决于区域设置,因此它不如顶部的解决方案那么健壮。