Java Time API

クラス

LocalDate日付を扱う
LocalTime時間を扱う
LocalDateTime日付と時間を扱う

インスタンス生成

now()現在時間取得LocalDate.now()
of()数値指定LocalDate.of(2024,11,25)
parse()文字列からLocalDate.parse("2024-11-25")
//	現在日時の取得
LocalDate d1 = LocalDate.now();

//	特定日時
LocalDate d2 = LocalDate.of(2024,11,25);

//	特定日時
LocalDateTime dt1 = LocalDateTime.of(2025,1,3,12,30,50);

//	文字列
LocalDate d3 = LocalDate.parse("2024-11-24");

メソッド

isAfter(値)値より後か?d1.isAfter(d2)
isBefore(値)値より前か?d1.isBefore(d2)
isEqual(値)値と同じか?d1.isEqual(d2)
plus単位(値)単位(Years,Months,Days,Hours,Minutes,Seconds)分足して返すd.plusDay(5)
minus単位(値)単位(Years,Months,Days,Hours,Minutes,Seconds)分引いて返すd.minusDay(5)
get単位()単位(Year,MonthValue,DayOfMonth,DayOfWeek,Hour,Minute,Second)取得d.getDayOfMonth()
with単位()単位(Year,MonthValue,DayOfMonth,Hour,Minute,Second)設定d = d.withDayOfMonth(25)
// 前後関係
if( d1.isAfter(d2)) {
	System.out.println("d1が後");
}else {
	System.out.println("d2が後");
}

//	5日後
LocalDate d4 = d1.plusDays(5);
System.out.println(d4);

System.out.println(d1.getYear());	//	年
System.out.println(d1.getMonthValue());	// 月
System.out.println(d1.getDayOfMonth());	// 日

// 日を1日に
d1 = d1.withDayOfMonth(1);
System.out.println(d1);

書式

format(書式)。書式はDateTimeFormatterクラス。DateTimeFormatter.ofPattern(書式文字列)で生成。

文字列化

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("y年MM月dd日");
System.out.println(d1.format(dtf));

文字列から

String str = "2025/06/08";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("y/MM/dd");
LocalDate d = LocalDate.parse(str, dtf);
System.out.println(d);

書式記号

記号 意味
y2025
M6
MM月(2桁)06
d日(数字)8
dd日(2桁)08
H時(0~23)9
HH時(2桁、0~23)09
h時(1~12)3
hh時(2桁、1~12)03
m5
mm分(2桁)05
s7
ss秒(2桁)07
a午前/午後AM / PM
E曜日(短縮)
EEEE曜日(完全)日曜日
Zタイムゾーン(+0900)+0900
XXXISO 8601形式の時差+09:00

間隔

// 2つのLocalDateの間隔
long days = ChronoUnit.DAYS.between(d1, d2);
System.out.println(days);

他の型との変換

java.sql.Dateとの変換

// java.sql.Dateへ変換
Date d = Date.valueOf(d1);
System.out.println(d);

// java.sql.Dateから変換
LocalDate d5 = d.toLocalDate(); 
System.out.println(d5);

Spring Boot

Thymeleafでの表示

#dates の代わりに #temporalsを使用する。

日付の例:

#temporals.format(値,'yyyy/MM/dd')

日時の例:

#temporals.format(値,'yyyy/MM/dd HH:mm:ss')

エンティティでの設定

日付の例:

※フォームのinputタグはtype=date
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
private LocalDate hi;

日時の例:

※フォームのinputタグはtype=datetime-local
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime hi;