Date/Time Начинающий

Вычисляйте разницу во времени типобезопасно с помощью Duration и Period.

✕ Pre-Java 8
// How many days between two dates?
long diff = date2.getTime()
    - date1.getTime();
long days = diff
    / (1000 * 60 * 60 * 24);
// ignores DST, leap seconds
✓ Java 8+
long days = ChronoUnit.DAYS
    .between(date1, date2);
Period period = Period.between(
    date1, date2);
Duration elapsed = Duration.between(
    time1, time2);
Заметили проблему в этом коде? Сообщите нам.
🎯

Типобезопасность

Duration для времени, Period для даты — никакой путаницы.

🛡️

Корректные вычисления

Обрабатывает переход на летнее время, високосные годы и секунды координации.

📖

Читаемость

ChronoUnit.DAYS.between() читается как естественный язык.

Старый подход
Арифметика в миллисекундах
Современный подход
Duration / Period
Начиная с JDK
8
Сложность
Начинающий
Duration и Period
Доступно

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

Duration представляет временные величины (часы, минуты, секунды). Period представляет календарные величины (годы, месяцы, дни). ChronoUnit.between() подходит для простых разниц. Все классы корректно обрабатывают граничные случаи.