首页 文章

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

提问于
浏览
0

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

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

但是如果我去ISO web site that claims to show me the time on my computer它显示的时间与时钟匹配但结束-0400 . (我试图复制/粘贴它,但它很难,因为它每秒都会改变 . )在Google中输入"current time 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 回答

  • 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的?还有什么?请回答,我可以回答这个问题 .

相关问题