将UTC转换为本地

时间:2012-04-10 15:13:11

标签: c++ visual-c++ time utc

我的时区是美国东部标准时间,比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。

我错过了什么?

4 个答案:

答案 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。