2011-08-03 59 views
5

我想DateTime.MinValue轉換成的DateTimeOffset值,但我得到的ArgumentOutOfRange例外。轉換DateTime.MinValue到的DateTimeOffset

我一直在尋找在the MSDN article on implicit conversions of DateTime to DateTimeOffset,並且我會收到此ArgumentOutOfRange異常,當異常部分的狀態;

... 協調世界時(UTC)日期和由應用偏移結果的時間是早 MINVALUE。 ...

爲什麼然後下面的代碼拋出異常;

DateTime test = DateTime.MinValue; 
DateTimeOffset dto = test; 

它簡單地歸結於我的時區?我在格林威治標準時間+8,但我對上述代碼的理解是,測試是用未指定類型創建的。

我周圍的工作問題通過簡單地爲我的DateTime的MINVALUE測試,如果是這樣,然後用DateTimeOffset.MinValue代替。

我,爲什麼我的那種不確定DateTime對象導致錯誤僅僅是好奇。

回答

5

如果您在GMT + 8的時候,那麼DateTime.MinValue一個本地時間對應於UTC比DateTime.MinValue時間,因此例外。從文檔您參考:

如果DateTime.Kind屬性的值是D​​ateTimeKind.Local或DateTimeKind.Unspecified的的DateTimeOffset對象的日期和時間設置等於DATETIME,其偏移屬性設置等於本地系統當前時區的偏移量。

所以邏輯上你具有MinValue 8的Offset一個小時DateTime,但這意味着該UTC日期/時間從施加所述偏移導致早於可表示。

(不要忘記,你添加偏移到UTC以獲取本地時間,或減去從本地時間得到UTC它在Noda Time我們通過使用類型爲每個Offset執行本,LocalInstantInstant,只允許你進行相應的操作......)

+0

謝謝喬恩。我不敢相信我錯過了那部分文檔。 –

+1

這解釋了我的Windows Phone應用程序中的一個bug,一直困擾着我:) –

相關問題