Основы API java.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. DayOfWeek.MONDAY вместо 2.
Потокобезопасность
Синхронизация не требуется — можно свободно использовать между потоками.
Старый подход
Date + Calendar
Современный подход
java.time.*
Начиная с JDK
8
Сложность
Начинающий
Поддержка JDK
Основы API java.time
Доступно
Широко доступен начиная с JDK 8 (март 2014)
Как это работает
java.time предоставляет LocalDate, LocalTime, LocalDateTime, Instant и ZonedDateTime — все неизменяемые и потокобезопасные. Месяцы индексируются с 1. Больше никакой путаницы с Calendar.JANUARY = 0.
Связанная документация
Доказательство