Windows 如何从C代码(Win32)生成RFC1123日期字符串
定义了许多内容,其中包括互联网协议中使用的日期格式。HTTP()指定必须按照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
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
取决于区域设置,因此它不如顶部的解决方案那么健壮。