2017-09-26 12 views
8

Mam wrażenie, że źle zrozumiałem konwersję java.util.Date zi do java.time.Instance. Mam jakiś staroświecki kod, którego muszę używać, a ten kod używa java.util.Date w swoim interfejsie API.Konwersja z `java.time.Instant` na` java.util.Date` dodaje przesunięcie UTC

Jestem nieco zdezorientowany, gdy w API Date dodawane są korekty. To był mój zrozumieć, że Date jest czas UTC („klasa Date ma odzwierciedlać skoordynowanego czasu uniwersalnego (UTC)”), ale kiedy tworzę Date z Instant przesunięcie w brzmieniu:

public class TestDateInstant { 
    @Test 
    public void instantdate() { 
     Instant i = Instant.now(); 
     System.out.println(i); 
     Date d = Date.from(i); 
     System.out.println(d); 

     assertThat(i, equalTo(d.toInstant())); 
    } 
} 

twierdzenie trzyma, ale wyjście na konsoli to:

2017-09-26T08:24:40.858Z 
Tue Sep 26 10:24:40 CEST 2017 

Zastanawiam się dlaczego Date.from wykorzystuje przesunięcie w tej sprawie.

+2

'Date.from' nie używa przesunięcia. Przesunięcie jest stosowane, gdy * drukowanie * wartości 'Date'. – Andreas

+0

Przydatny artykuł, aby zrozumieć, co się dzieje: https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/ –

Odpowiedz

7

Date lub Instant oba NIE są specyficzne dla strefy czasowej. Różnica polega na tym, że je drukujesz.

Instant.toString() wydruki w reprezentacji ISO-8601 w strefie czasowej UTC.

Date.toString() wydrukuje go w bieżącej strefie czasowej.

Dlatego właśnie widzisz różnicę.

+0

Po wydrukowaniu d.getHour() zwraca również godzinę z przesunięcie zamiast czasu UTC. – Jens

Powiązane problemy