2013-04-23 64 views
2

這是一個特殊情況。TimeZone.IsInvalidTime無法捕捉2010年由埃及dst導致的無效時間

我正在修正將無效本地時間轉換爲UTC的問題。在本地時區,由於夏令時(dst),某些時段無法轉換爲UTC。給定正確的時區,TimeZone.IsInvalidTime()可用於識別此類數據時間值。

在埃及,DST在2010年發生了4次變化(由於齋月)。第二個這樣的轉換似乎沒有被IsInvalidTime()檢測到。

編輯 的TimeZoneInfo.ConvertTime(),這是我用實際將其轉換爲UTC的東西,這些值轉換爲UTC。轉換錯誤,但轉換完全相同。

有人碰到過這個,有什麼建議可以覆蓋這個嗎?

+1

看看這裏http://support.microsoft.com/kb/2297272並不知道如果你需要[此修補程序](http://support.microsoft.com/kb/2543367) – V4Vendetta 2013-04-23 11:23:43

+0

它似乎修復日曆和展望,但不提供圖書館的幫助。 – Nanda 2013-04-23 11:48:53

回答

2

Windows時區數據庫以準確地反映時區規則的歷史更改而臭名昭着。改用IANA/Olson時區數據庫。有關不同數據庫的更多信息,請參見TimeZone tag wiki

對於.Net,最好的解決方案是使用NodaTime。它完全實現了IANA/Olson數據庫。您可以使用Africa/Cairo時區,它準確反映了所有的歷史變化。

+1

這裏不僅僅是問題的歷史方面 - 我相信Windows時區表示每年都不能支持超過2次轉換。 – 2013-04-24 16:38:02