2011-10-29 24 views
0

我使用以下函數將UTC的日期時間轉換爲當地時間(西澳大利亞州標準,+8 GMT)。TimeZoneInfo和IIS

var waTimeZone = TimeZoneInfo.FindSystemTimeZoneById("W. Australia Standard Time"); 
var timeInWA = TimeZoneInfo.ConvertTime(utcDateTime, TimeZoneInfo.Utc, waTimeZone); 

但是這個代碼開始在我們的生產服務器的特定日期時間不當行爲。

E.g

如果我轉換31/10/2011 00:00 - > 31/10/2011 09:00,而不是31/10/2011 08:00。

如果我轉換01/10/2011 00:00 - > 01/10/2011 08:00這是正確的。

此代碼在生產後一段時間內運行良好,我們在幾天前注意到這一點。服務器設置爲GMT + 8,但我認爲這不影響這段代碼。

同樣一段代碼在其他服務器和本地機器上運行良好。

有人請提供一些關於哪些可能導致這種行爲改變的想法嗎? Windows更新? IIS配置更改? .Net錯誤? etc ...

更新: 我檢查了更多的信息,作爲Yahia建議。結果是有目共睹的。

waTimeZone.IsDaylightSavingTime(date) --> False 

waTimeZone.GetUtcOffset(date) --> 08:00:00 

但我仍然得到不正確的轉換+9小時而不是+8。所以.Net在這裏有點不一致。

但是我檢查了服務器的註冊表項,給出了錯誤的轉換和本地機器,它爲我提供了正確的答案,這很有趣。 Registry Comparison

我認爲我們的IT人員並沒有將DST補丁更新到服務器。

更新:確認IT人員在他們的DST補丁安裝中錯過了此服務器。這是此行爲的根本原因。

+0

嘗試讓列表所有你安裝的時區... Mabey流氓(或不流氓?)DST條目導致它。 –

回答

3

我懷疑你列出的日期/時間關於夏令不同 - 以確保這是真的如此檢查這兩個值和waTimeZone如下:

據我所知,澳大利亞的一些地方不再有DST(2009年結束的DST--見西澳政府的鏈接http://wa.gov.au/daylightsaving/)。 你看到的是不是一個錯誤,但是你錯過了一些行動,以適用於服務器

對於微軟Windows,你需要採取一些行動,以適應這種變化 - 看http://technet.microsoft.com/en-au/bb821275.aspx