Date/Calendarクラス⇔DateTime-APIのクラスを相互変換する
Date/Calendarクラス⇔DateTime-APIのクラスを相互変換する- public static Date from(Instant instant) … Date
- public Instant toInstant() … Date/Calendar
- public static LocalDateTime ofInstant(Instant instant, ZoneId zone) … XxxxxDateTime
- instant:変換対象のインスタント
新しくDate-Time APIが導入されたとはいえ、いきなりすべてのコードをDate-Time APIで統一するのは現実的ではありません。当面は、従来のjava.utilパッケージと併用していくことになるでしょう。」
そこで、従来のDate/Calendarクラスに、Date-Time APIと相互変換するためのメソッドが用意されています。
Date#fromメソッドは、与えられたInstantオブジェクトからDateオブジェクトを生成します。Instantは、日付時刻を1970年1月1日からの経過時間で保持するクラスです。Date-Time APIの日付/時刻クラスは、それぞれtoInstantメソッドが用意されており、Instantオブジェクトを生成できるようになっていますので、これをfromメソッドに渡せばDateオブジェクトを生成できるというわけです(※)
※CalendarクラスにはDate#fromメソッドに相当するメソッドはありません。生成されたDateオブジェクトからCalendarオブジェクトを生成することになるでしょう。
Calendar/DateクラスにもtoInstantメソッドは用意されています。生成されたInstantオブジェクトをLocalDateTime/OffsetDateTime/ZonedDateTimeクラスのofInstantメソッドに渡すことで、それぞれ対応するオブジェクトを生成できます。
以下は、LocalDateTimeオブジェクトをDateオブジェクトに、CalendarオブジェクトをLocalDateTimeオブジェクトに、それぞれ変換する例です。
TimeTrans.java
package com.example.mynavi.datetime;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.Date;
public class TimeTrans {
public static void main(String[] args) {
LocalDateTime local = LocalDateTime.now();
System.out.println(local); // 結果:2020-01-04T17:15:45.166806900
Instant instant = local.toInstant(ZoneOffset.of("+09:00"));
Date date = Date.from(instant);
System.out.println(date); // 結果:Sat Jan 04 17:15:45 JST 2020
Calendar cal = Calendar.getInstance();
Instant instant2 = cal.toInstant();
LocalDateTime local2 = LocalDateTime.ofInstant(instant2, ZoneId.of("Asia/Tokyo"));
System.out.println(local2); // 結果:2020-01-04T17:15:45.185
}
}






