JavaのLocalDateTimeで日時関連処理を簡単にする方法

Javaで日時関連の処理を対応するにはjava.timeのライブラリでLocalDateTimeが便利です。これらはJava8から対応されました、これまでのJavaで日付関連の歴史は次の通りになっています。

Date → Calendar → LocalDateTime

LocalDateTime()

LocalDateTimeについて説明します。日付と時刻を取得。引数を指定すれば設定することが出来る。計算もできる。java.time.LocalDateTime はjava.time.LocalDate、java.time.LocalTimeを内包しています。

LocalDateTime サンプルコード
// 現在時刻取得
LocalDateTime localDateTimeNow = LocalDateTime.now();
System.out.println("現在時刻取得 " + localDateTimeNow);

// Zone指定して現在時刻取得
LocalDateTime localDateTimeZoneId = LocalDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println("Zone指定して現在時刻取得 " + localDateTimeZoneId);

// 指定時刻取得
// of​(int year, Month month, int dayOfMonth, int hour, int minute, int second)
LocalDateTime localDateTimeOf = LocalDateTime.of(2021, 1, 2, 3, 0, 0);
System.out.println("指定時刻取得 " + localDateTimeOf);

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

// LocalDateTime のデフォルト形式 yyyy-MM-ddTHH:mm:ss.SSSSSSSSS を yyyy/MM/dd HH:mm:ss 形式の文字列に変換
String localDateTimeString = LocalDateTime.now().format(dateTimeFormatter);
System.out.println("形式変換、文字列に変換 " + localDateTimeString);

// 指定の時刻、指定の形式のLocalDateTimeインスタンスを取得する。文字列はフォーマットと形式を合わせる必要がある。
LocalDateTime parseLocalDataTime = LocalDateTime.parse(localDateTimeString, dateTimeFormatter);
System.out.println("形式変換、文字列に変換 " + parseLocalDataTime);

結果は次のようにコンソール出力されます。

現在時刻取得 2021-01-09T23:13:24.318777300
Zone指定して現在時刻取得 2021-01-09T23:13:24.320754800
指定時刻取得 2021-01-02T03:00
形式変換、文字列に変換 2021/01/09 23:13:24
形式変換、文字列に変換 2021-01-09T23:13:24

Thymeleafは対応していない

注意事項としてはThymeleafのバージョン2と3ではまだJava8に対応していないので使用できません。日付関連処理用のプラグインが用意されているので、それを適用するとLocalDateTime/LocalDate/LocalTimeを使用することが出来るようになります。

ThymeleafでLocalDateTimeを扱う
Javaのjava.timeのライブラリでLocalDateTime便利なのですが、Thymeleaf3系では対応していません。 th...

Oracle DBも対応していない

また、Oracleデータベースにもこの型を使用することができません。マッピングする型が指定されていないためです。ですので、Oracleデータベースにマッピングさせる際にはJava側で一度型変換させるとOracleデータベースで使用することが出来るようになります。Spring Bootには型変換の便利な仕組みがあるので、それを使用すると簡単に使用することが出来るようになります。

参考

LocalDateTime (Java SE 11 & JDK 11 ) – Oracle

DateTimeFormatter (Java SE 11 & JDK 11 ) – Oracle