JavaのLocalDateTime.fromメソッドを完全ガイド!初心者でもわかる日時変換の基本
生徒
「先生、Javaで既存の日時オブジェクトからLocalDateTimeを作りたいときってどうすればいいですか?」
先生
「その場合はLocalDateTimeクラスのfromメソッドを使うんだよ。TemporalAccessorを受け取って簡単に新しいLocalDateTimeを生成できるんだ。」
生徒
「TemporalAccessorって何ですか?少し難しそうに聞こえます。」
先生
「心配いらないよ。ZonedDateTimeやOffsetDateTimeのような日時を扱うクラスもTemporalAccessorを実装しているから、それを渡すだけで変換できるんだ。」
1. java.timeパッケージとは
java.timeパッケージはJava8から導入された新しい日付と時刻のAPIで、従来のDateやCalendarよりも直感的で安全に使えるのが特徴です。システム開発や業務アプリケーションでは必須といえるくらい広く利用されています。初心者が日時処理を学ぶ際は、このjava.timeを理解することがとても重要です。
2. LocalDateTimeクラスの役割
LocalDateTimeは日付と時刻を保持するクラスですが、タイムゾーン情報は含みません。そのため「2025年9月23日10時30分」のように、純粋に年月日と時間だけを表現する場合に使います。データベースへの保存や画面表示でよく利用される基本クラスです。
3. fromメソッドの基本
fromメソッドは、TemporalAccessorを実装したオブジェクトからLocalDateTimeを生成する静的メソッドです。例えばZonedDateTimeやOffsetDateTimeなどを渡すと、その日時情報を使ってLocalDateTimeを作り出すことができます。
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
public class FromExample {
public static void main(String[] args) {
ZonedDateTime zoned = ZonedDateTime.now();
LocalDateTime local = LocalDateTime.from(zoned);
System.out.println(local);
}
}
2025-09-23T10:30:45
4. ZonedDateTimeからの変換
ZonedDateTimeはタイムゾーンを持つ日時を扱うクラスですが、LocalDateTime.fromを使うことでタイムゾーン情報を無視した純粋なローカル日時を取得できます。グローバルサービスで受け取った日時をユーザーのローカル表示に変換する際に役立ちます。
5. OffsetDateTimeからの変換
OffsetDateTimeはUTCとの時差を保持するクラスですが、これもfromで簡単に変換できます。オフセット付きの時刻データをシンプルなローカル時間に変換して保存したいときに便利です。
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
public class OffsetExample {
public static void main(String[] args) {
OffsetDateTime offset = OffsetDateTime.now();
LocalDateTime local = LocalDateTime.from(offset);
System.out.println(local);
}
}
2025-09-23T10:30:45
6. fromメソッドとparseの違い
よく初心者が混同するのがfromとparseの違いです。parseは文字列からLocalDateTimeを生成するメソッドであり、fromは既存のTemporalAccessorから変換するために使います。入力元が文字列か日時オブジェクトかで使い分けると理解しやすいです。
7. fromメソッドの実践例
業務システムでは、サーバーから受け取ったZonedDateTimeをそのまま扱うのではなく、LocalDateTimeに変換して画面表示に使うことが多いです。例えば予約システムで「開始日時」を登録するとき、ユーザーに見せる部分はシンプルなLocalDateTimeで十分です。
8. fromメソッド利用時の注意点
fromに渡すオブジェクトが正しくTemporalAccessorを実装していない場合、例外が発生することがあります。実際にはZonedDateTimeやOffsetDateTimeのような標準クラスを使う場面がほとんどなので安心ですが、API設計のときには意識しておくとよいでしょう。