Windows GetTimeZoneInformation时差与ISO网站或Google不匹配

时间:2013-04-18 19:28:19

标签: windows timezone timezone-offset

我的电脑是Windows 7 64位;我在美国东海岸(东部时间); “日期和时间”小程序 - 通过右键单击任务栏时钟并选择“调整日期/时间” - 标记我的时区“(UTC-05:00)东部时间(美国和加拿大)”和告诉我,夏令时在11月结束。 (对于那些后来出现的人来说,这是在4月份写完之后,我们做了“春季前进”以获得夏令时。)

调用Windows GetTimeZoneInformation或GetDynamicTimeZoneInformation API(后者仅在Vista或更高版本上可用)返回300分钟,5小时的“偏差”值。 (偏差值不是负值,因为该值的doc表示“UTC =本地时间+偏差”。)

但如果我转到ISO web site that claims to show me the time on my computer,它会显示一个与时钟匹配但结束时间为-0400的时间。 (我尝试复制/粘贴它,但它很难,因为它每秒都会改变。)在Google中输入“当前时间utc”显示的时间也比时钟时间提前4(而不是5)小时。

让我更加困惑 - 我有一个运行Windows Server 2008的EC2实例,其他人设置并说有意设置为GMT,因此根据服务器时钟记录的时间不会导致1小时的跳转夏令时。

当我连接到该服务器时,它显示的时间比我在此处看到的时间早5个小时。但其控制面板中的日期/时间小程序(与Windows 7不同)显示当前时区为“(GMT)格林威治标准时间(都柏林,爱丁堡,里斯本,伦敦)”,但也有一个时区“(GMT)协调世界时“ - UTC - 如果我将时区更改为(我认为是正确的),则偏移量为4小时。

Windows 7上的“时区设置”对话框(通过单击上面讨论的“日期和时间”小程序中的“更改时区...”按钮到达)具有标记为“(UTC)协调世界时”的时区(从现在起4小时)和“(UTC)都柏林,爱丁堡,里斯本,伦敦”(从现在起5小时)。

除了认为EC2实例的时区设置错误之外 - 应该将其设置为UTC而不是伦敦时间来实现上述目标 - 我对此并不了解。美国的Windows 7说我距离UTC还有5个小时;其他一切(包括Windows 2008设置为UTC时间)说4个小时。

那么例程应该如何生成具有尾随时区偏移量的ISO样式时间戳? Windows API告诉我它应该是-0500,但其他一切都说应该是-0400。帮助!

1 个答案:

答案 0 :(得分:1)

在东部夏令时期间,偏移确实是UTC-04:00。 Windows中时区的显示名称列表不会更改以反映此情况。它只显示标准偏移量,东标准时间为UTC-05:00。

您是正确的,服务器应设置为“(UTC)协调世界时”,而不是标记为“(UTC)都柏林,爱丁堡,里斯本,伦敦”的设置。 “协调世界时”设置永久固定为UTC,其中另一个在英国夏令时具有UTC + 01:00的日光偏移。同样,标签仅显示标准偏移,即UTC + 00:00,在显示中缩短为“(UTC)”。

您提出的唯一编程问题:

  

那么例程应该如何生成带有尾随时区偏移量的ISO样式时间戳呢?

这在很大程度上取决于您使用的语言。您提到了用于获取系统当前时区信息的Win32 API,但很少直接调用它们。你在用C写作吗? C ++? C#? VB? Java的?还有什么?请回答,我可以回答这个问题。