我使用以下函數將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在這裏有點不一致。
但是我檢查了服務器的註冊表項,給出了錯誤的轉換和本地機器,它爲我提供了正確的答案,這很有趣。
我認爲我們的IT人員並沒有將DST補丁更新到服務器。
更新:確認IT人員在他們的DST補丁安裝中錯過了此服務器。這是此行爲的根本原因。
嘗試讓列表所有你安裝的時區... Mabey流氓(或不流氓?)DST條目導致它。 –