W. Aus 标准时间 .Net TimeZoneInfo 支持夏令时问题

W. Aus Standard Time .Net TimeZoneInfo SupportsDaylightSavingsTime Issue

W.Aus 标准时间的 .Net/WindowsTimeZoneInfo 对象表明它支持夏令时。在澳大利亚政府网站上搜索有关领土遵守夏令时的信息显示西澳大利亚在 2009 年废除了它,因此从 2010 年至今及以后没有夏令时。

我查了好几个系统的TimeZoneInfo对象,都说W Aus Standard Time supports dst。他们所有的注册表都具有相同的值。我检查了 Windows 更新,但找不到 TimeZoneInfo 对象的更新。

任何人都可以阐明为什么 Microsoft 在 7 年多的时间里似乎忽略了更新此对象吗?我错过了什么吗?

我相信你看到了这个:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("W. Australia Standard Time");
tzi.SupportsDaylightSavingTime == true

根据 the MSDN documentation SupportsDaylightSavingTime 属性:

Gets a value indicating whether the time zone has any daylight saving time rules.

因此,它不会告诉您时区当前是否使用夏令时,它会告诉您是否曾经 ] 至少在 Windows 时区数据的时间简史内。

如果您想知道夏令时是否当前有效,请执行:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("W. Australia Standard Time");
tzi.IsDaylightSavingTime(DateTime.UtcNow) // false

而如果你想知道在特定年份的任何时间是否支持它,你可以检查从GetAdjustmentRules方法返回的调整规则数据。

Windows 将时区数据存储在注册表中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
     \Time Zones\W. Australia Standard Time\Dynamic DST

所以我们可以看到注册表中有2005年以后的数据。如果仔细观察,您还可以看到 2006 年和 2009 年之间的一些差异。如果您有兴趣,This article 可以帮助您解释数据。

确实,如果我们查看 timeanddate.com(一个 非常 时区信息的好资源),我们可以看到西澳大利亚确实从 2006 年开始实行夏令时至 2009 年:

最后,我要补充一点,Windows 时区服务团队非常擅长掌握全球时区数据的变化。您可以监控 this blog for updates. In particular, they greatly expanded coverage and improved historical accuracy with the June 2016 update.

对于澳大利亚,2016 年 6 月更新添加了两个新时区;一个用于豪勋爵岛(UTC+10:30 STD,UTC+11:00 DST),一个用于尤克拉附近使用的非官方中西部时间(UTC+08:45),但任何标准都不需要更正大陆时区。