在 C/C++ 中在本地时间和 UTC 之间转换日期时间的最佳方法是什么?
我所说的“日期时间”是指包含日期和时间的时间表示形式。我会很高兴time_t
, struct tm
,或任何其他使其成为可能的表示。
我的平台是Linux。
这是我试图解决的具体问题:我得到一对包含儒略日期和当天的秒数的值。这些值采用 GMT。我需要将其转换为本地时区“YYYYMMDDHHMMSS”值。我知道如何将儒略日期转换为 Y-M-D,显然将秒转换为 HHMMSS 很容易。然而,棘手的部分是时区转换。我确信我能找到解决方案,但我更愿意找到一种“标准”或“众所周知”的方法,而不是跌跌撞撞。
一个可能相关的问题是获取 C 时区的夏令时转换日期 https://stackoverflow.com/questions/678445/get-daylight-saving-transition-dates-for-time-zones-in-c
你应该使用以下组合gmtime
/localtime
and timegm
/mktime
。这应该为您提供正交工具来进行转换struct tm
and time_t
.
对于 UTC/GMT:
time_t t;
struct tm tm;
struct tm * tmp;
...
t = timegm(&tm);
...
tmp = gmtime(t);
对于当地时间:
t = mktime(&tm);
...
tmp = localtime(t);
All tzset()
确实是设置内部时区变量TZ
环境变量。我认为这不应该被多次调用。
如果您尝试在时区之间进行转换,您应该修改struct tm
's tm_gmtoff
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)