日付を扱うクラスはLocalDateTimeかLocalDate(時刻不要の場合)を使う。
現在時刻から作成するには?
LocalDateTime now = LocalDateTime.now();
LocalDate now1 = LocalDate.now();
Date型やSimpleDateFormatは使わない。使用禁止。
プレゼンテーション層(@Controller層)~サービス層(@Service)~インテグレーション層(@Dao/@Repository)まで、すべてLocalDateTimeかLocalDateで日付は扱うようにする。
変数で受け渡していくとき、Stringは絶対使わない。複数層にまたがるとすぐに分からなくなる。LocalDateTime、LocalDateで扱うようにする。
フォーマットするとき
LocalDateTime#formatに事前定義したDateTimeFormatterのパターンを渡すようにする。ここでもStringを各機能担当者に書かせないようにするのがポイント。
システム内で扱うフォーマットはこれだけですよとDateUtilクラスを作ってそこに事前に定義しておく。
スラッシュを使いたいシーンになったら、使いたい時に、使い方時だけフォーマットするようにする。
そうすると、開発者の開発体験は上がる。
日時のユーティリティはこれだけでいける
package com.example.sampleprojectapi.utilities;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* 現在日時の取得と、システム内で扱う日付フォーマットを定義する.
*/
public class DateUtil {
/** 現在日時を取得する */
public static LocalDateTime getCurrentDateTime() {
return LocalDateTime.now();
}
/** 現在日付を取得する */
public static LocalDate getCurrentDate() {
return LocalDate.now();
}
/** 日付フォーマットは下記を使用する */
public static DateTimeFormatter ymdHyphen = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static DateTimeFormatter ymdSlash = DateTimeFormatter.ofPattern("yyyy/MM/dd");
public static DateTimeFormatter ymdHmHyphen = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm");
public static DateTimeFormatter ymdHmSlash = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm");
public static DateTimeFormatter ymdHmsHyphen = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
public static DateTimeFormatter ymdHmsSlash = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss");
}
HTTPリクエストを受け取るときとDBから値を取得するときに、LocalDateTime または LocalDate で受け取るようにしておく。
現在日時を処理内で取得するときは、上記のDateUtil#getCurrentDateTimeを使用する。
あとは表示のときのフォーマットだけ定義してあげれば、LocalDateTime.format(DateUtil.ymdSlash)の要領で書ける。
日付の比較なんかもLocalDateTime#isAfter や LocalDateTime#isBeforeがそのまま使えるため、コードの見通しもよくなる。
ポイントはやはり極力、LocalDateTime または LocalDateを使うようにすること。