2012-07-05 16 views
13

Jeśli utworzę nowy obiekt Date(). Jaka będzie domyślna strefa czasowa, którą wydrukuje.Jaka jest domyślna strefa czasowa w java.util.Date

Mam urządzenie działające w GMT. I tworzę nowy obiekt Date(). Jeśli wydrukuję, dlaczego to pokazuje Thu Jul 05 08:21:05 PKT 2012. Jak to się dzieje w strefie czasowej jako PKT?

+1

może wypróbować ten link pod adresem http://stackoverflow.com/q/2891361/1465828 – Aprian

+0

Dzięki. Ale to nie odpowiada na moje pytanie. – user1182253

+0

Według innych języków wiem, że powinien to być UTC, ponieważ przynajmniej w Pythonie i Celu C daty są przechowywane z tą domyślną strefą czasową. –

Odpowiedz

18

Data sama w sobie nie ma żadnej strefy czasowej. Jego toString() metoda wykorzystuje obecną domyślną strefę czasową, aby powrócić ciąg reprezentujący tę datę:

Date date = new Date(); 

System.out.println(TimeZone.getDefault()); 
System.out.println(date); 

TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 

System.out.println(TimeZone.getDefault()); 
System.out.println(date); 

wykonując powyższy kod na moim komputerze prowadzi do następnego wyjścia:

sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]] 
Fri Jul 06 09:24:45 CEST 2012 
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 
Fri Jul 06 07:24:45 UTC 2012 
+0

W środowisku Eclipse plik java.lang.date wyświetla obiekt cdate.zoneInfo. Może nie być dostępny z mojego pov data ma powiązaną strefę czasową. Odgrywa kluczową rolę podczas konwersji do innej strefy czasowej. Bez znajomości strefy czasowej konwersja nie byłaby możliwa. Czy możesz rzucić trochę światła na "nie ma strefy czasowej?" –

+0

@ThomasS "nie ma znaczenia w strefie czasowej" -> Po pierwsze, dokumentacja mówi: ... klasa Date ma odzwierciedlać skoordynowany czas uniwersalny (UTC) ... –

3

No faktycznie podstawowe razy data zwykle są agnostyczne w strefie czasowej, nie przechowują stref czasowych. Aby korzystać ze strefy czasowej, korzystasz z formaterów, kalendarzy i tym podobnych. Oczywiście podstawowa data musi znajdować się w domyślnej strefie czasowej, niezależnie od tego, jaka jest (zwykle GMT), w przeciwnym razie nie można utworzyć lokalnej daty z podstawowej instancji daty.

W twoim przypadku pomogłoby to spojrzeć na a) javadocs i b) na samą klasę, ponieważ JDK jest zwykle dystrybuowany z kodem źródłowym java.util.Date. Zgodnie z javadoc klasa java.util.Date reprezentuje liczbę milisekund od czasu podstawowego znanego jako "epoka", mianowicie 1 stycznia 1970, 00:00:00 GMT.

Jeśli podczas drukowania na drukarce jest wyświetlana inna data, dzieje się tak dlatego, że system wydrukuje go przy użyciu domyślnej strefy czasowej dla systemu. Możesz jednak wydrukować ją samodzielnie, korzystając z dowolnej innej strefy czasowej.

3

Jeśli pracujesz pod Linuksem, gdzieś w systemie jest jakiś magiczny plik strefy czasowej. Dla mojego Gentoo magia właśnie tworzenie pliku tekstowego/etc/czasową z zawartością

Europe/Berlin 

Najśmieszniejsze jest to, że date dał poprawną godzinę i strefę czasową (CEST) przez cały czas, ale java wysłał mnie do Greenwhich.

> date 
Thu Sep 18 08:49:14 CEST 2014 
Powiązane problemy