将 RFC 822 时间戳转换为 unixtime,时区值不起作用,C/C++

发布于 2024-10-18 06:49:59 字数 425 浏览 6 评论 0原文

我有一个将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南城旧梦 2024-10-25 06:49:59

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文