我喜欢用秒数来计算本地时间(在某些时区)和GMT的差异。我使用以下代码片段:
time_t now = time(0); // GMT
time_t gmnow = mktime(gmtime(&now)); // further convert to GMT presuming now in local
time_t diff = gmnow - now;
但是,我得到了一个错误的差异。我在这里做的是通过time(0)查询当前时间作为GMT。然后假设这是本地时间,我调用gmtime添加GMT差异因子并使用mktime重新转换为本地时间。这应该显示GMT和我的时区的差异,但它显示了1小时的额外差异(夏令时)。
例如,我的当前时间是Thu Mar 13 04:54:45 EDT 2014当我获得GMT的当前时间时,应该是:考虑到这是当前时间,如果我调用gmtime,这应该进一步进行,并重新转换回来应该给予我一个4小时的差异,但我得到一个5小时的差异。
gmtime在这里使用错误吗?还有,我怎么知道当前时区以及夏令时的时间?
2条答案
按热度按时间0vvn1miw1#
好了!
下面的代码片段可以解决这个问题:
诀窍是检查tm_isdst标志,如果适用,如果设置,调整一个小时以上的差异这工程.感谢大家的时间.
rn0zuynd2#
这可以用我认为正确的方式来处理: