Подтвердить что ты не робот

Новый API даты и времени в Java 8

На этой странице я прочитал следующее:

Чтобы делать вычисления с датами, это также очень просто. Вероятно, лучшее улучшение по сравнению с текущей ситуацией с Java < 1,8:

Period p = Period.of(2, HOURS);
LocalTime time = LocalTime.now();
LocalTime newTime = time.plus(p); // or time.plus(5, HOURS); or time.plusHours(5); 

Я не вижу явного преимущества перед версиями < 1,8.

Может, кто-нибудь может дать мне пример? Atm, я спрашиваю себя, откуда происходит усовершенствование нового API даты и времени.

4b9b3361

Ответ 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 значительно вдохновлен jodatime, который уже давно является предпочтительным API Java Date. Вы также можете прочитать подробное сравнение даты Java (< 1.8) с JodaTime (большинство из них должно применяться к API Java 8 Date).

Ответ 2

Преимущества нового API даты/времени

  • Понятия даты (LocalDate), времени (LocalTime), даты и времени (LocalDateTime), мгновенного (Instant) намного понятнее и соответствуют их значению на общем языке.
  • Уточнение даты/времени для определенного значения стало проще (метод 'of', например LocalDate.of(2016,1,1))
  • Работа с високосными годами (метод isLeapYear) стала тривиальной.
  • Добавление/вычитание дат стало очень простым. Например. сегодня обратиться через 10 лет: LocalDate.now(). PlusYears (10)
  • Месяц смещения нумерации, адаптированный к интуиции. "Январь" теперь "1", а не "0" по-прежнему

Недостатки

  • Пока не поддерживается JPA2
  • Пока не поддерживается JSF2