2013-07-08 14 views
9

Na this stronie i przeczytać:Nowa data i godzina API w Java 8

Aby wykonać obliczenia z datami, to jest bardzo proste. Prawdopodobnie najlepszy poprawę w stosunku do obecnej sytuacji z 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); 

nie wyraźnie widać przewagę przed Wersje < 1.8.

Może ktoś może dać mi przykład? Atm, zadaję sobie pytanie, skąd pochodzi poprawa nowej daty & API czasu.

+2

Czy ty napisać tę samą funkcjonalność z JDK? –

Odpowiedz

27

Z Java < 8, trzeba by napisać coś takiego:

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); 

Ulepszenia są zasadniczo na

  • czytelności:
    • Calendar.getInstance() nie jest zbyt dobrze nazwany: trudno jest stwierdzić, , która instancja uzyskujesz bez czytania Javadoc. LocalTime.now() jest dość samoopisujące: dostajesz czas i jest to teraz.
    • Aby zrównoważyć datę, należy wywołać metodę kompensacji (plus), natomiast w przypadku interfejsu API kalendarza należy ręcznie zmienić pola obiektu (w tym przykładzie na godzinę), które są podatne na błędy.
  • łatwość użycia (patrz na przykład tabela w kierunku dna this page dla porównania):
    • API Kalendarz jest skomplikowany w użyciu, ponieważ łączy koncepcje, takie jak prosty daty (26 czerwca 2015) i natychmiastowy w czasie (26 czerwca 2015 roku o godzinie 10 UTC) - nie jest klasą dla byłej koncepcji
    • nowy czas API ma wyraźne rozgraniczenie między the various date/time concepts
  • bezpieczeństwa:
    • Interfejs API Kalendarza nie jest bezpieczny: nic nie stoi na przeszkodzie, aby napisać cal.set(123, 2), która wyświetli niezbyt pomocny numer ArrayOutOfBoundsException. Nowy interfejs API wykorzystuje wyliczenia, które rozwiązują ten problem.
    • Nowy interfejs API używa niezmiennych obiektów, dzięki czemu jest bezpieczny w wątku.

Ogólnie rzecz biorąc, nowe API jest znacznie inspirowany jodatime która była korzystna Java Data API od dłuższego czasu. Możesz także przeczytać this detailed comparison of Java (<1.8) date vs. JodaTime (większość z nich powinna dotyczyć API Data 8 Java 8).

+5

Cóż ... nie jest tak źle, jak na to wygląda: normalnie używasz ['cal.add (Calendar.HOUR, 2)'] (http://docs.oracle.com/javase/6/docs /api/java/util/Calendar.html#add%28int,%20int%29). Zgadzam się jednak, że nowy interfejs API to znaczna poprawa z wszystkich wymienionych powodów. – jahroy

+0

@jahroy Masz rację - nie korzystałem z interfejsu API daty od dłuższego czasu ;-) – assylias

1

Zalety nowego data/czas API

  • Pojęcia daty (LOCALDATE), czas (lokalny), data & czas (LocalDateTime), błyskawiczne (Instant) są znacznie jaśniejsze i odpowiadają ich znaczenie we wspólnym języku.
  • Intializing datę/czas, aby o określonej wartości jeszcze łatwiejsze (metoda 'z', np LocalDate.of (2016,1,1))
  • czynienia z lat przestępnych (metoda ISLEAPYEAR) dostał trywialne
  • Dodawanie/odejmowanie daty stały się bardzo łatwe. Na przykład. na dzień dzisiejszy za 10 lat: LocalDate.now(). plusYears (10)
  • Korekcja numeracji miesięcy dostosowana do intuicji. 'Styczeń' jest '1' i teraz nie '0' jak przed

Wady

  • Jeszcze nie poparte JPA2
  • Jeszcze nie poparte JSF2
Powiązane problemy