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はJava 8で導入された比較的新しいAPIで、まだまだ既存のコードにはCalendar/Dateクラス(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) {
- var local = LocalDateTime.now();
- System.out.println(local); // 結果:2025-01-10T23:05:04.383990
- var instant = local.toInstant(ZoneOffset.of("+09:00"));
- var date = Date.from(instant);
- System.out.println(date); // 結果:Fri Jan 10 23:05:04 JST 2025
- var cal = Calendar.getInstance();
- var instant2 = cal.toInstant();
- var local2 = LocalDateTime.ofInstant(instant2, ZoneId.of("Asia/Tokyo"));
- System.out.println(local2); // 結果:2025-01-10T23:05:04.398
- }
- }
- 日付/時刻(Date-Time API)_目次
- 日付/時刻(Date-Time API)
- now/of/parseメソッド
- formatメソッド
- betweenメソッド
- 日時データを演算する
- Date/Calendarクラス⇔DateTime-APIのクラスを相互変換する
監修