将 RFC 822 时间戳转换为 unixtime,时区值不起作用,C/C++
我有一个将 RFC 822 时间戳转换为 unixtime 的函数
#include <stdio.h>
#include <time.h>
int main() {
struct tm tm;
time_t unixtime;
strptime("Sun, 20 Feb 2011 10:28:02 +0800","%a, %e %h %Y %H:%M:%S %z",&tm);
unixtime = mktime(&tm);
printf("%d\n",unixtime);
return 0;
}
问题:时区部分 (%z) 似乎不起作用。我尝试将输入时区更改为其他值+0100、+0200等而不更改其他日期值,它总是给出相同的unix时间戳(即对应于GMT的unix时间戳)
这里可能有什么问题?
I've a function which converts an RFC 822 timestamp to unixtime
#include <stdio.h>
#include <time.h>
int main() {
struct tm tm;
time_t unixtime;
strptime("Sun, 20 Feb 2011 10:28:02 +0800","%a, %e %h %Y %H:%M:%S %z",&tm);
unixtime = mktime(&tm);
printf("%d\n",unixtime);
return 0;
}
Problem: The timezone part (%z) doesn't seem to be working. I tried changing input timezone to other values +0100, + 0200 ect without changing other date values, it always gives the same unixtime stamp (ie, unixtimestamp corresponding to GMT)
What can be the issue here ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
struct tm 不包含时区字段。支持 %z 只是为了支持与 strftime 相同的标志。您需要手动提取并调整时区偏移。
struct tm does not contain a timezone field. %z is supported simply to support the same flags as strftime. You'll need to extract and adjust the timezone offset manually.