Ответ 1
С Java < 8, вам нужно написать что-то вроде:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) + 2);
против. с Java 8:
LocalTime now = LocalTime.now();
LocalTime later = now.plus(2, HOURS);
Улучшения по существу на
- читаемости:
-
Calendar.getInstance()
не очень хорошо назван: трудно сказать, какой экземпляр вы получаете, не читая Javadoc.LocalTime.now()
довольно самоописано: вы получаете время, и оно теперь. - Чтобы компенсировать дату, вы вызываете метод смещения (
plus
), тогда как с помощью API календаря вы должны вручную изменить поля объекта (в этом примере, час), который является подверженным ошибкам.
-
- простота использования (см., например, таблицу внизу эту страницу для сравнения):
- API-интерфейс Calendar сложно использовать, потому что он смешивает понятия, такие как простая дата (26 июня 2015 года) и мгновенное время (26 июня 2015 года в 10 утра по UTC) - нет класса для прежней концепции
- Новый Time API имеет четкое разделение между различными понятиями даты и времени
- Безопасность:
- API календаря небезопасен: ничто не мешает вам писать
cal.set(123, 2)
, который бросает не очень полезныйArrayOutOfBoundsException
. Новый API использует перечисления, которые решают эту проблему. - Новый API использует неизменяемые объекты, что делает его потокобезопасным.
- API календаря небезопасен: ничто не мешает вам писать
В целом, новый API значительно вдохновлен jodatime, который уже давно является предпочтительным API Java Date. Вы также можете прочитать подробное сравнение даты Java (< 1.8) с JodaTime (большинство из них должно применяться к API Java 8 Date).