2013-06-21 13 views
5

ja zrobiłem to dla mojego przykład kalendarza Data powrotu w strefie czasowej UTCCalendar.getTime() nie wraca datę UTC jeśli strefa czasowa jest określona

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:SS Z"); 
TimeZone tz = TimeZoneUtil.getTimeZone(StringPool.UTC); 
formatter.setTimeZone(tz); 

    Date dtStart = null; 
    Date dtEnd = null; 

    try{ 
     dtStart = formatter.parse(formatter.format(startDate.getTime())); 
     dtEnd = formatter.parse(formatter.format(endDate.getTime())); 
    }catch (Exception e) { 
     e.getStackTrace(); 
} 

Współpracuje aż kalendarzowego Format ja datownika zwraca datę ciąg z wymaganą strefą czasową, ale kiedy parsuję tę datę na datę daty, ponownie odbiera ona lokalną strefę czasową? Potrzebuję przechowywać obiekt Date w strefie czasowej UTC.

Każda pomoc będzie wysoko ceniona!

+0

możliwy duplikat [Jak mogę uzyskać aktualną datę i czas w UTC lub GMT w Javie?] (Http://stackoverflow.com/questions/308683/how-can-i-get-the- current-date -i-time-in-utc-or-gmt-in-java) –

Odpowiedz

7

Można to wykorzystać:

Date localTime = new Date(); 

//creating DateFormat for converting time from local timezone to GMT 
DateFormat converter = new SimpleDateFormat("dd/MM/yyyy:HH:mm:ss"); 

//getting GMT timezone, you can get any timezone e.g. UTC 
converter.setTimeZone(TimeZone.getTimeZone("GMT")); 

System.out.println("local time : " + localTime);; 
System.out.println("time in GMT : " + converter.format(localTime)); 

To da:
czas lokalny: piątek 21 czerwca 2013 11:55:00 UTC
czas GMT: 21/06/2013: 11:55:00

Mam nadzieję, że to pomoże.

Pozdrawiam.

0

Obiekt daty w java będzie zawsze przechowywać wartości w informacji o strefie czasowej komputera hosta (system).

To z javadoc:

Chociaż klasa Date ma odzwierciedlać skoordynowanego czasu uniwersalnego (UTC), to nie może to zrobić dokładnie, w zależności od środowiska przyjmującym Java Virtual Machine.

Powinieneś próbować używać Joda Time, która jest bardzo zaawansowana.

+0

To nie jest prawda, domyślny konstruktor Date() przechowuje wartość [System.currentTimeMillis()] (http://docs.oracle.com/javase/7/docs/api/java/lang/System.html # currentTimeMillis% 28% 29), czyli liczba milisekund od 1 stycznia 1970 UTC. Jak wspomniałeś, istnieją niewielkie rozbieżności między czasem komputera a UTC, patrz dyskusja na temat [sekund przestępnych] (http://docs.oracle.com/javase/7/docs/api/java/util/Date.html) . Ale Joda Time nie daje żadnych korzyści w tym zakresie, zobacz [Czy sekund skoku obsługiwane] (http://joda-time.sourceforge.net/faq.html#leapseconds). – devconsole

-1

Dobrą wyjaśnienie dlaczego obiekt Date biorąc Aktualna wartość strefie czasowej,

zapoznaj tej SO answer

edytować.


tutaj dodam ważną część tych odpowiedzi.


java.util.Date nie ma określonej strefy czasowej, chociaż jej wartość jest najczęściej brana pod uwagę w stosunku do czasu UTC. Co sprawia, że ​​myślisz, że jest w czasie lokalnym?

Mówiąc dokładniej: wartość w java.util.Date to liczba milisekund od epoki Unix, która nastąpiła o północy 1 stycznia 1970 roku, UTC. Tę samą epokę można opisać także w innych strefach czasowych, ale tradycyjny opis dotyczy UTC. Ponieważ jest to liczba milisekund od ustalonej epoki, wartość w java.util.Date jest taka sama na całym świecie w dowolnej chwili, niezależnie od lokalnej strefy czasowej.

Powiązane problemy