java.time APIの基本
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
難易度
初級
JDKサポート
java.time APIの基本
利用可能
JDK 8(2014年3月)以降、広く利用可能
仕組み
java.timeはLocalDate、LocalTime、LocalDateTime、Instant、ZonedDateTimeを提供します。これらはすべて不変でスレッドセーフです。月は1始まりのため、Calendar.JANUARY = 0 の混乱はもうありません。
関連ドキュメント