0

我的时区是美国东部标准时间,比 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 返回时,tt 关闭一小时。我那里是 11:30 而不是 10:30。

我错过了什么?

4

4 回答 4

3

我认为这与夏令时有关。您确定您当前的时区是 EST (-5) 吗?因为您的系统似乎应该使用 EDT (-4) ?

于 2012-04-10T15:31:38.510 回答
1

验证您的本地时区。英格兰(例如伦敦)和美国东海岸目前都处于夏令时,所以这看起来是个问题(正如有人已经提到的那样)。对于美国东海岸 EDT 将有 4 小时的不同。

于 2012-04-10T15:53:21.627 回答
1

我已经在我的机器上尝试了你的代码并且它工作正常(我的时区是 GMT+2)。由于您告诉系统检查夏令时本身(tmis的最后一个参数-1),因此它实际上正在使用 EDT,因此为您提供 GMT-4。

您可以尝试将月份 ( 3)替换为2,以便日期为 3 月 10 日,就在夏令时更改之前;我敢打赌,在这种情况下,你会得到预期的 10:30。

于 2012-04-10T15:54:25.723 回答
0

以为问题是月份是三月: struct tm t = { 0, 30, 15, 10, 3 , 112, 0, 0, -1 }; 然后,这是夏令时问题。但正如 Gorpik 所指出的,“月份从 0 到 11,所以 4 月确实是 3”。

所以,我检查了 - 它显示海法的 18:30 是正确的 +2UTC。

于 2012-04-10T15:48:07.943 回答