Date/Time 初級

DateとCalendarの代わりに、不変で明確な日付・時刻型を使用する。

✕ Pre-Java 8
// Mutable, confusing, zero-indexed months
Calendar cal = Calendar.getInstance();
cal.set(2025, 0, 15); // January = 0!
Date date = cal.getTime();
// not thread-safe
✓ Java 8+
LocalDate date = LocalDate.of(
    2025, Month.JANUARY, 15);
LocalTime time = LocalTime.of(14, 30);
Instant now = Instant.now();
// immutable, thread-safe
このコードに問題がありますか? お知らせください。
🔒

不変性

日付・時刻の値が誤って変更されることがありません。

📖

明確なAPI

Month.JANUARYは0ではなく1。DayOfWeek.MONDAYも直感的です。

🛡️

スレッドセーフ

同期不要でスレッド間で自由に共有できます。

旧来のアプローチ
DateとCalendar
モダンなアプローチ
java.time.*
JDKバージョン
8
難易度
初級
java.time APIの基本
利用可能

JDK 8(2014年3月)以降、広く利用可能

java.timeはLocalDate、LocalTime、LocalDateTime、Instant、ZonedDateTimeを提供します。これらはすべて不変でスレッドセーフです。月は1始まりのため、Calendar.JANUARY = 0 の混乱はもうありません。

共有 𝕏 🦋 in