2011-08-03 12 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; 

これは私のタイムゾーンによるものですか?私はGMT +8ですが、上記のコードを理解することは、テストが未指定の種類で作成されていることです。

私は単にDateTimeのMinValueをテストし、もしそうならばDateTimeOffset.MinValueを使用して問題を回避しています。

私の不特定の種類のDateTimeオブジェクトが原因でエラーが発生したのは、単に興味があります。

答えて

5

あなたはGMT + 8にしている場合は、DateTime.MinValue現地時間が故に時間早くDateTime.MinValueよりUTC、例外に対応します。

をDateTime.Kindプロパティの値がDateTimeKind.LocalかDateTimeKind.Unspecifiedであれば、のDateTimeOffsetオブジェクトの日時がdateTimeのに等しく設定され、そのOffsetプロパティが設定されている:あなたは、参照文書からローカルシステムの現在のタイムゾーンのオフセットに等しい。

ので、論理的に、あなたはOffset 8の時間でMinValueDateTimeを持っているでしょうが、それはオフセットを適用した結果のUTC日付/時刻を表現することができるよりも前であることを意味しています。

(あなたはUTCを取得するためのローカル時間からそれをローカルタイムを取得、または減算するUTCオフセットを追加ことを忘れないでください。Noda Timeでは、我々はOffsetのそれぞれのタイプを使用してこれを施行、LocalInstantInstant、あなたは適切な操作を実行することができます...)

+0

ありがとうございました。私はドキュメントのその部分を逃したとは思えません。 –

+1

これは、しばらく私を迷惑させている私のWindowsの電話アプリのバグを説明します:) –

関連する問題