我的时区是美国东部标准时间,比UTC晚5个小时。鉴于:
struct tm t = { 0, 30, 15, 10, 3, 112, 0, 0, -1 };
time_t utc_in_timet = _mkgmtime(&t);
struct tm tt = { 0 };
localtime_s(&tt, &utc_in_timet);
当localtime_s返回时,关闭一小时。我在那里11:30而不是10:30。
我错过了什么?
答案 0 :(得分:3)
我认为这与夏令时有关。你确定你的时区目前是EST(-5)吗?因为你的系统似乎应该使用EDT(-4)?
答案 1 :(得分:1)
验证您当地的时区。英格兰(例如伦敦)和美国东海岸目前都在白天节省时间,所以这看起来像是问题(正如有人提到的那样)。对于美国东海岸,EDT将有4个小时的不同。
答案 2 :(得分:1)
我已经在我的机器上尝试了你的代码并且它正常工作(我的时区是GMT + 2)。由于您要告诉系统自己检查夏令时(tm
的最后一个参数是-1
),它实际上是在使用EDT,因此会为您提供GMT-4。
您可以尝试将月份(3
)替换为2
,以便日期为3月10日,就在夏令时变化之前;我敢打赌,在这种情况下你会得到预期的10:30。
答案 3 :(得分:0)
认为问题是月份是3月:struct tm t = {0,30,15,10, 3 ,112,0,0,-1}; 然后,它是夏令时问题。但正如Gorpik所指出的那样,“月份从0到11,所以四月确实是3”。
所以,我检查了 - 它在海法18:30显示正确+ 2UTC。