【发布时间】:2014-09-18 03:04:48
【问题描述】:
我想用Australia/Sydney 时区构造一个struct tm,所以我首先使用:
setenv("TZ","Australia/Sydney",1);
tzset()
然后我将struct tm 设置为:
struct tm _tm;
_tm.tm_sec = 0;
_tm.tm_min = 45;
_tm.tm_hour = 7;
_tm.tm_mday = 18;
_tm.tm_mon = 8;
_tm.tm_year = 114;
这应该设置为澳大利亚时间 2014/09/18 7:45:00 然后我打电话:
time_t other_tm = mktime(&_tm);
在这次通话之后,other_tm 和 _tm 都指向澳大利亚时间上午 6 点 45 分!原因是 other_tm 的值为 1410986700,您可以从 Epoc 转换器验证它确实指向早上 6:45,有人知道为什么吗?
【问题讨论】:
-
看一下 UTC 转换:stackoverflow.com/a/3661129/3895252
-
setenv 和 tzset 使用正确的时区来达到目的,以便 mktime 可以使用当前的本地时区。但这似乎不起作用。
-
@user2426361 将
tm_isdst设置为非随机值怎么样,它有效吗? -
@n.m.是的,我错过了那部分,对不起。是的,设置
tm_isdst = -1有效。所以这个故事的寓意是setenv是不够的,我需要将该标志设置为 -1 以便mktime将尝试确定 dst 是否来自本地时区。谢谢。