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. DayOfWeek.MONDAY вместо 2.

🛡️

Потокобезопасность

Синхронизация не требуется — можно свободно использовать между потоками.

Старый подход
Date + Calendar
Современный подход
java.time.*
Начиная с JDK
8
Сложность
Начинающий
Основы API java.time
Доступно

Широко доступен начиная с JDK 8 (март 2014)

java.time предоставляет LocalDate, LocalTime, LocalDateTime, Instant и ZonedDateTime — все неизменяемые и потокобезопасные. Месяцы индексируются с 1. Больше никакой путаницы с Calendar.JANUARY = 0.