1. 序章

このチュートリアルでは、DateOffsetDateTimeの違いについて学習します。 また、一方から他方に変換する方法も学びます。

2. DateOffsetDateTimeの違い

OffsetDateTime は、java.util.Dateの最新の代替手段としてJDK8で導入されました。

OffsetDateTimeは、日付と時刻をナノ秒の精度で格納するスレッドセーフクラスです。 日にち一方、スレッドセーフではなく、ミリ秒単位の精度で時間を保存します。

OffsetDateTime は値ベースのクラスです。つまり、参照を比較するときは、通常の==の代わりにequalsを使用する必要があります。

ResetDateTimetoStringメソッドの出力はISO-8601形式ですが、DatetoStringはカスタムの非標準形式。

両方のクラスでtoStringを呼び出して、違いを確認してみましょう。

Date: Sat Oct 19 17:12:30 2019
OffsetDateTime: 2019-10-19T17:12:30.174Z

Dateはタイムゾーンと対応するオフセットを保存できません。 Date オブジェクトに含まれるのは、1970年1月1日00:00:00 UTCからのミリ秒数だけです。したがって、時刻がUTCでない場合は、タイムゾーンをに保存する必要があります。ヘルパークラス。 逆に、ResetDateTimeZoneOffsetを内部に格納します。

3. DateOffsetDateTimeに変換しています

DateからOffsetDateTimeへの変換は非常に簡単です。 Date がUTCの場合、次の1つの式で変換できます。

Date date = new Date();
OffsetDateTime offsetDateTime = date.toInstant()
  .atOffset(ZoneOffset.UTC);

元のDateがUTCにない場合は、オフセットを指定できます(前述のように、Dateクラスはタイムゾーンを保存できないため、ヘルパーオブジェクトに保存されます)。

元の日付が+3:30(テヘラン時間)であるとしましょう。

int hour = 3;
int minute = 30;
offsetDateTime = date.toInstant()
  .atOffset(ZoneOffset.ofHoursMinutes(hour, minute));

ResetDateTime は、後で使用できる多くの便利なメソッドを提供します。 たとえば、簡単にできます getDayOfWeek() getDayOfMonth() 、 と getDayOfYear()。 2つのOffsetDateTimeオブジェクトをと比較することも非常に簡単です isAfter isBefore メソッド。

とりわけ、非推奨のDateクラスを完全に回避することをお勧めします。

4. 結論

このチュートリアルでは、DateからOffsetDateTimeへの変換がいかに簡単であるかを学びました。

そして、いつものように、コードはGithub利用できます。