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

C++ 将RFC 822时间戳转换为unixtime,时区值不工作,C/C++;,c++,c,timestamp,unix-timestamp,rfc822,C++,C,Timestamp,Unix Timestamp,Rfc822,我有一个函数,它将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",

我有一个函数,它将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;
}
#包括
#包括
int main(){
struct-tm;
时间是唯一的时间;
strtime(“Sun,2011年2月20日10:28:02+0800”,%a,%e%h%Y%h:%M:%S%z”,&tm);
unixtime=mktime(&tm);
printf(“%d\n”,unixtime);
返回0;
}
问题:时区部分(%z)似乎不工作。我尝试将输入时区更改为其他值+0100、+0200等,但不更改其他日期值,它始终提供相同的UnixtTime戳(即,unixtimestamp对应于GMT)


这里会出现什么问题?

struct tm不包含时区字段。%支持z只是为了支持与strftime相同的标志。您需要手动提取和调整时区偏移。

好的,strtime的手册页说它通过GNU扩展支持%z。检查页面底部:是的,它支持解析这些。但这并没有给struct tm一个时区成员。手册页(至少在我最近的linux框中)明确指出“在大多数情况下,解析了相应的字段,但tm中没有任何字段被更改。”感谢您的澄清。我将手动解析时区字符串并偏移所需的秒数。