2013-07-08 2 views
9

На this странице я прочитал следующее:New Дата и время 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 времени.

+2

Можете ли вы написать те же функции с JDK? –

ответ

27

С Java < 8, вам нужно будет написать что-то вроде:

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) + 2); 

VS. с Java 8:

LocalTime now = LocalTime.now(); 
LocalTime later = now.plus(2, HOURS); 

Улучшения в основном на

  • читаемости:
    • Calendar.getInstance() не очень хорошо назван: трудно сказать , который экземпляр, который вы получаете, не читая Javadoc. LocalTime.now() довольно самоописано: вы получаете время, и это сейчас.
    • Чтобы компенсировать дату, вы вызываете метод смещения (plus), тогда как с помощью API календаря вы должны вручную изменить поля объекта (в этом примере - час), который подвержен ошибкам.
  • простота использования (см, например, таблицу в нижней части this page для сравнения):
    • Календарь API осложненной использовать, потому что он смешивает понятия, такие как простой даты (26 июня 2015) и момент времени (26 июня 2015 года в 10 часов утра по Гринвичу) - есть не класс для прежней концепции
    • новое время API имеет четкое разделение между the various date/time concepts
  • безопасности:
    • API-интерфейс календаря небезопасен: ничто не мешает вам писать cal.set(123, 2), который будет бросать не очень полезный ArrayOutOfBoundsException. Новый API использует перечисления, которые решают эту проблему.
    • Новый API использует неизменяемые объекты, что делает его потокобезопасным.

В целом, новый API значительно вдохновило от jodatime которая была предпочтительная Java API Дата в течение достаточно долгого времени. Вы также можете прочитать this detailed comparison of Java (<1.8) date vs. JodaTime (большинство из них должно применяться к API-интерфейсу Java 8 Date).

+5

Ну ... это не так плохо, как вы делаете это выше: вы обычно используете ['cal.add (Calendar.HOUR, 2)'] (http://docs.oracle.com/javase/6/docs /api/java/util/Calendar.html#add%28int,%20int%29). Но я согласен с тем, что новый API является большим улучшением по всем причинам, которые вы указали. – jahroy

+0

@jahroy Вы правы - я давно не использовал API-интерфейс даты ;-) – assylias

1

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

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

Недостатки

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