6

DateTime.MinValueをDateTimeOffset値に変換しようとしていますが、ArgumentOutOfRange例外が発生しています。

DateTimeからDateTimeOffsetへの暗黙的な変換に関するMSDNの記事を見ていましたが、「例外」セクションには、次の場合にこのArgumentOutOfRange例外を受け取ると記載されています。

...オフセットを適用した結果の協定世界時(UTC)の日付と時刻は、 MinValueよりも前です。..。

それでは、なぜ次のコードが例外をスローするのでしょうか。

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

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

DateTimeのMinValueをテストするだけで問題を回避し、テストする場合は、代わりにDateTimeOffset.MinValueを使用します。

不特定の種類のDateTimeオブジェクトがエラーを引き起こす理由について知りたいだけです。

4

1 に答える 1

7

GMT + 8を使用している場合、の現地時間は、より前のUTCDateTime.MinValue時間に対応するため、例外となります。参照したドキュメントから:DateTime.MinValue

DateTime.Kindプロパティの値がDateTimeKind.LocalまたはDateTimeKind.Unspecificedの場合、DateTimeOffsetオブジェクトの日付と時刻はdateTimeに等しく設定され、そのOffsetプロパティはローカルシステムの現在のタイムゾーンのオフセットに等しく設定されます。

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

( UTCにオフセットを追加して現地時間を取得するか、現地時間から減算してUTCを取得することを忘れないでください。野田時間Offsetでは、、、、のそれぞれに型を使用してこれを適用し、LocalInstant次のInstantことのみを許可します。適切な操作を実行してください...)

于 2011-08-03T09:23:43.447 に答える