Kri*_*son 30 c c++ timezone dst
在C/C++中,在本地时间和UTC之间转换日期时间的最佳方法是什么?
"datetime"是指包含日期和时间的一些时间表示.我会很乐意用time_t
,struct tm
或任何其他的表示,使之成为可能.
我的平台是Linux.
这是我正在尝试解决的具体问题:我得到一对包含朱利安日期和一天中的秒数的值.这些值是格林威治标准时间.我需要将其转换为本地时区"YYYYMMDDHHMMSS"值.我知道如何将朱利安日期转换为YMD,显然很容易将秒转换为HHMMSS.然而,棘手的部分是时区转换.我相信我能找到解决方案,但我宁愿找到一种"标准"或"众所周知"的方式,而不是磕磕绊绊.
可能相关的问题是在C中获取时区的夏令时转换日期
Ric*_*tty 21
你应该使用gmtime
/ localtime
和timegm
/的组合mktime
.这应该为您提供正交工具来进行struct tm
和之间的转换time_t
.
对于UTC/GMT:
time_t t;
struct tm tm;
struct tm * tmp;
...
t = timegm(&tm);
...
tmp = gmtime(t);
Run Code Online (Sandbox Code Playgroud)
对于当地时间:
t = mktime(&tm);
...
tmp = localtime(t);
Run Code Online (Sandbox Code Playgroud)
所有这些tzset()
都是从TZ
环境变量设置内部时区变量.我不认为这应该不止一次被召唤.
如果你想时区之间进行转换,您应该修改struct tm
的tm_gmtoff
.
小智 18
如果在Windows上,您没有timegm()可用:
struct tm *tptr;
time_t secs, local_secs, gmt_secs;
time( &secs ); // Current time in GMT
// Remember that localtime/gmtime overwrite same location
tptr = localtime( &secs );
local_secs = mktime( tptr );
tptr = gmtime( &secs );
gmt_secs = mktime( tptr );
long diff_secs = long(local_secs - gmt_secs);
Run Code Online (Sandbox Code Playgroud)
或类似的东西......