2011-12-02 85 views
4

不確定我在這裏做錯了什麼。我正在嘗試爲東澳大利亞獲得當前UTC小時的抵消時間。我使用的代碼將在GMT + 10小時後返回,而應該是11,因爲他們目前在DST中。ASP.NET 3.5:難以獲取時區的當前偏移

這是我用得到它是什麼:

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

這似乎輸出「基地」偏移,忽視DST。我如何獲得考慮夏令時的實際當前偏移量?

更新1迴應jlew的建議。我試過得到IsDaylightSavingTime,但似乎給出了不一致的結果。我知道東澳和新西蘭都在DST。

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

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

而下面的返回TRUE(正確):

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

更新2看到this post後,我檢查IsAmbiguousTime,但是這兩種情況都是假的。所以它不是「模棱兩可」,但「E.澳大利亞」區域在應該是不使用DST的時候。

更新3看到this post後,我安裝了MS的Dec 2011 cumulative DST update,但沒有喜悅。 E.澳大利亞地區仍然不正確。

我也嘗試在其他兩臺不同的服務器上運行代碼,結果相同。我的.net v3.5,其他的是v4。

更新4好的,可能已經解決了它。再次查看系統時區ID列表,我注意到另一個東區的區域名稱。它被稱爲「AUS東部標準時間」。使用該區域,它會產生正確的,DST友好的結果。使用「E.澳大利亞標準時間」不會。

環顧四周,它似乎變成了一種變態的感覺,因爲不同的城市,在同一個國家的同一時區,可能有不同的DST規則。誰讓他們這樣做?

這是一個問題,沒有一個全球地圖,哪些區域ID與哪些城市相關。毫無疑問,這對MS來說並不難。可以使用DisplayName屬性來顯示用戶可以從中選擇的列表,但是如果應用程序需要將時間從一個城市轉換爲另一個城市,則需要以某種方式知道這些城市應該使用哪些ID。

如果MS包括城市到ZoneID的查詢,至少對於主要城市來說,與時區一起工作會很麻煩。

+0

你有這樣一個列表,點擊任務欄中的時鐘並導航到時區選擇器。請注意布里斯班市如何特殊。坐在大陸的東部邊緣,它自1992年以來沒有觀測到夏令時。 –

+0

我的意思是我們需要一個列表。NET,所以我們可以自動將城市名稱與區域ID相匹配。 –

+0

我意識到這是令人難以置信的晚,但我只是想表示慰問。我搬到了墨爾本,在那裏我不得不開發一個與布里斯班溝通的應用程序(顯然是高度敏感的) - 雖然在同一個時區不會觀察DST ...血腥的澳大利亞人! –

回答