2015-06-27 16 views
8

Dla następujący kod Java 8java 8 czas api - Instant.now (zegar) vs LocaldateTime.now (zegar)

1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); 
    2. System.out.println(Instant.now(Clock.systemDefaultZone())); 

Linia 1 print bieżący czas przez dodanie przesunięcia ale linia 2 drukuj aktualny czas bez dodawania offsetowy.

Sprawdziłem kod źródłowy obu i okazało się, że LocaDateTime.now(clock) zwraca czas powrotu clock.instant(), dodając przesunięcie, ale nie robiąc tego, Instant.now(clock).

Dlaczego tak to zaprojektowano? Czy nie oczekujemy tego samego wyniku w obu przypadkach?

Odpowiedz

6

AKTUALIZACJA: Natychmiastowe nie ma nic wspólnego z UTC w sensie strefy czasowej. Jest związany z UTC tylko jako standardem czasowym.

Główną różnicą jest typ zwrotu. Mają różne reprezentacje String, ponieważ same typy mają bardzo różne znaczenia.

Natychmiastowe # teraz (zegar) zwraca Natychmiastowy. Natychmiastowa to .

LocalDate # teraz (zegar) zwraca LocalDate. A LocalTime to "a description of the local time as seen on a wall clock".

wskutek tanie # teraz (zegar) i LOCALDATE # teraz (zegar) oznaczać bardzo różne rzeczy i naturalnie mają różne wyniki. Najważniejsze, że mają wspólną nazwę. Nazwy metod to kurz. Zobacz typy.

na stałej Zegar, zarówno Instant.now (zegar) i LocalDate.now (zegar) powróci wartości stałych. Punktem akceptacji parametru Clock jest zachowanie czasu odniesienia lub rozdzielczości zegara.

+0

Czy możesz mi powiedzieć, jaka jest potrzeba przekazania parametru Clock jako parametru? – nantitv

+2

Zegar jest dozwolony jako parametr pozwalający na użycie przypadków, takich jak zegar stały lub offset w testowaniu, lub w różnych rozdzielczościach, jak na przykład sekundy lub minuty. https://docs.oracle.com/javase/8/docs/api/java/time/Clock.html –

+0

@nantitv Odtąd przepisałem odpowiedź. To było trochę mgliste wcześniej. Czy teraz skutecznie odpowiada na twoje pytanie? –

Powiązane problemy