关于时区:W。 Aus标准时间.Net TimeZoneInfo支持DaylightSavingsTime问题

W. Aus Standard Time .Net TimeZoneInfo SupportsDaylightSavingsTime Issue

W. Aus标准时间的.Net / Windows TimeZoneInfo对象显示它支持夏令时。 在澳大利亚政府网站上搜索有关领土遵守夏令时的情况显示,西澳大利亚州在2009年废除了它,因此从2010年到现在及以后都没有夏令时。

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

任何人都可以解释为什么微软似乎忽略了更新这个对象7年多了? 我错过了什么吗?


我相信你看到了这个:

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

根据SupportsDaylightSavingTime属性上的MSDN文档:

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

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

如果您想知道DST当前是否有效,请执行以下操作:

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

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

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

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

Registry

因此,我们可以看到2005年有一些数据来自注册表。如果仔细观察,您还可以看到2006年到2009年之间的一些变化。如果您有兴趣,本文可以帮助您解释数据。

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

timeanddate capture

最后,我要补充一点,Windows时区服务团队已经非常善于保持对全球时区数据的更改。您可以监控此博客以获取更新。特别是,他们通过2016年6月更新大大扩展了覆盖范围并提高了历史准确性。

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