Duration и Period
Вычисляйте разницу во времени типобезопасно с помощью 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
Сложность
Начинающий
Поддержка JDK
Duration и Period
Доступно
Широко доступен начиная с JDK 8 (март 2014)
Как это работает
Duration представляет временные величины (часы, минуты, секунды). Period представляет календарные величины (годы, месяцы, дни). ChronoUnit.between() подходит для простых разниц. Все классы корректно обрабатывают граничные случаи.
Связанная документация
Доказательство