web-dev-qa-db-ja.com

UTC DateTimeOffsetをシステムのタイムゾーンを使用するDateTimeに変換する方法

Quartz.netは、次のトリガーイベントの次回を取得する方法を提供します。 http://quartznet.sourceforge.net/apidoc/1.0/html/html/cc03bb79-c0c4-6d84-3d05-a17f59727c98.htm

ドキュメントは、このTrigger.GetNextFireTimeUtc()メソッドが_DateTime?_を返すと主張していますが、実際には_DateTimeOffset?_を返します。 DateTimeOffsetの目的や、この関数が通常のDateTimeの代わりに関数を返す理由がわかりません。次に必要なのは、次回トリガーが実行されるときですが、自分のタイムゾーン内です。

私はこれをtrigger.GetNextFireTimeUtc().Value.DateTimeしましたが、2時間早い時間、つまりUTC時間を与えてくれました。コンピュータに応じて正しい時刻を取得するにはどうすればよいですか?

15
Dan

DateTimeOffset.LocalDateTime プロパティ:

trigger.GetNextFireTimeUtc().Value.LocalDateTime

ドキュメントから:

必要に応じて、LocalDateTimeプロパティは現在のDateTimeOffsetオブジェクトの日付と時刻をローカルシステムの日付と時刻に変換します。変換は2段階の操作です。

  • このプロパティは、現在のDateTimeOffsetオブジェクトの時刻を協定世界時(UTC)に変換します。
  • 次に、プロパティはUTCを現地時間に変換します。

ただし、実際にはDateTimeOffsetを調べる必要があります。これは、日付/時刻の作業にBCLを使用しているかどうかを理解するために重要なタイプです。

39
Jon Skeet