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

时间:2017-04-14 00:28:03

标签: .net timezone registrykey

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

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

任何人都可以解释为什么微软似乎忽视了7年以来更新此对象的原因?我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

我相信你看到了这个:

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

SupportsDaylightSavingTime媒体资源上的the MSDN documentation

  

获取一个值,该值指示时区是否具有夏令时规则。

因此,它不告诉您时区目前是否使用夏令时,它会告诉您是否已经,至少在简报中Windows时区数据中的时间历史记录。

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

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

Registry

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

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

timeanddate capture

最后,我要补充一点,Windows时区服务团队已经非常善于掌握全球时区数据的变化。您可以监控this blog以获取更新。特别是,他们使用the June 2016 update极大地扩展了覆盖面并提高了历史准确性。

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