ASP.NET 3.5:难以获取时区的当前偏移量



不知道我在这里做错了什么。我正试图获得东澳大利亚当前#小时UTC偏移量。我使用的代码返回的是GMT+10小时,而它应该是11小时,因为他们现在是DST。

我是这样得到它的:

With TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time")
  Console.Write(.GetUtcOffset(Now.ToUniversalTime).Hours)
End With

它似乎输出了"基"偏移量,而忽略了DST。我如何得到实际的当前偏移考虑到DST ?

更新1回应jlew的建议。我试过获得IsDaylightSavingTime,但这似乎给出了不一致的结果。我知道东澳大利亚和新西兰目前都实行夏令时。

但是,下面返回FALSE(不正确):

TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time").IsDaylightSavingTime(Now.ToUniversalTime)

,下面返回TRUE(正确):

TimeZoneInfo.FindSystemTimeZoneById("New Zealand Standard Time").IsDaylightSavingTime(Now.ToUniversalTime)

更新2看到这篇文章后,我检查了IsAmbiguousTime,但在这两种情况下都是False。所以它不是"模棱两可的",但是"E. Australia"区域在应该使用夏时制的时候没有使用。

Update 3看到这篇文章后,我从MS安装了2011年12月的累积DST更新,但没有任何乐趣。东澳大利亚区仍然不正确。

我还尝试在其他2个不同的服务器上运行代码,结果相同。我的是。net v3.5,其他的是v4。

Update 4 Ok,可能已经解决了。再次查看系统时区id列表,我注意到是East Aus的另一个区域名称。它被称为"澳大利亚东部标准时间"。使用该区域,它确实会产生正确的、适合dst的结果。使用"E. Australia Standard Time"不能。

四处搜索,似乎有一种变态的感觉,因为不同的城市,在同一个国家的同一时区,可能有不同的夏令时规则。谁让他们这么做的?

这是一个问题,没有一个全球地图,哪些区域id与哪些城市相关。当然,这对微软来说并不太难。可以使用DisplayName属性来显示用户可以从中选择的列表,但是如果应用程序需要将时间从一个城市转换为另一个城市,它需要以某种方式知道这些城市应该使用哪些id。

如果MS包含City-to-ZoneID的查找,至少对于主要城市,那么处理时区将会省去很多麻烦。

我不知道是否有自动的方法,但是您可以使用TimeZone。IsDaylightSavingsTime和DaylightTime。

相关内容

  • 没有找到相关文章

最新更新