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

4

我不确定这里我做错了什么。我尝试获取澳大利亚东部当前UTC时区偏移量的小时数。我使用的代码返回GMT+10小时,而实际上应该是11小时,因为他们目前处于夏令时。

这是我用来获取它的代码:

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

似乎输出了“基本”偏移量,而忽略了夏令时。如何获取考虑夏令时的实际当前偏移量?
更新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”区在应该使用夏令时时没有使用。

更新3 在看到这篇文章后,我安装了来自MS的2011年12月累积DST更新,但没有成功。东澳大利亚地区仍然不正确。

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

更新4 好吧,可能已经解决了。再次查看系统时区ID列表时,我注意到东澳大利亚有一个名为“AUS Eastern Standard Time”的另一个区域名称。使用该区域,它会产生正确的、支持夏令时的结果。使用“E. Australia Standard Time”则不行。

搜索一下,似乎有一种变态的理解,因为同一国家的同一时区的不同城市可能有不同的夏令时规则。是谁让他们这样做的?

没有一个全球地图显示哪些区域ID与哪些城市相关,这是一个问题。肯定对于微软来说,这不是太难提供的服务。可以使用DisplayName属性显示用户可以选择的列表,但如果应用程序需要将时间从一个城市转换为另一个城市,它需要知道这些城市应该使用哪些ID。

如果微软包括一个城市到区域ID的查找,至少对于主要城市,那么使用时区将会更加轻松。


你有这样一个列表,在任务栏上点击时钟并导航到时区选择器。请注意布里斯班市的特殊性。作为大陆最东边的城市,自1992年以来它就没有观察夏令时。 - Hans Passant
我的意思是我们需要一个.NET中的列表,这样我们就可以自动将城市名称与区域ID进行匹配。 - ingredient_15939
我知道这已经太晚了,但我只是想表示同情。我搬到了墨尔本,在那里我不得不开发一个应用程序(显然是高度时间敏感的),它需要与布里斯班通信 - 虽然在同一时区,但不遵守夏令时...该死的澳洲人! - Darko
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接