2013-05-29 14 views
8

Próbuję przekonwertować datę lokalną na UTC, używając Joda Time. Kod, którego użyłem, jest pokazany poniżej i działa świetnie.JodaTime: Konwertuj lokalnie na UTC niejednoznaczność

Date localDate = new Date(); 
System.out.println("Local Date : " + localDate); 

DateTimeZone tz = DateTimeZone.getDefault(); 
Date utcDate = new Date(tz.convertLocalToUTC(localDate.getTime(), false)); 
System.out.println("UTC Date : " + utcDate); 

Output : 
Local Date : Wed May 29 11:54:46 EEST 2013 
UTC Date : Wed May 29 08:54:46 EEST 2013 

Ale jeśli wyślę UTC Data jako parametr do metody DateTimeZone.convertLocalToUTC(), ale również zmniejsza godzinę przez 3. Jednakże, ponieważ jest UTC Data, spodziewam się, że nie będzie datę ponownie przeliczyć. Czy to błąd, czy też coś mi brakuje?

Date localDate = new Date(); 
System.out.println("Local Date : " + localDate); 

DateTimeZone tz = DateTimeZone.getDefault(); 
Date utcDate = new Date(tz.convertLocalToUTC(localDate.getTime(), false)); 
System.out.println("UTC Date : " + utcDate); 

Date utcDate2 = new Date(tz.convertLocalToUTC(utcDate.getTime(), false)); 
System.out.println("UTC Date 2 : " + utcDate2); 

Output : 
Local Date : Wed May 29 11:54:46 EEST 2013 
UTC Date : Wed May 29 08:54:46 EEST 2013 
UTC Date 2 : Wed May 29 05:54:46 EEST 2013 

Odpowiedz

2

Spójrz na to z punktu widzenia metod convertLocalToUTC(). Po prostu zajmuje long i boolean. Nie ma żadnej wiedzy, że długo go mijasz to UTC lub nie. Zakłada on, że podajesz czas lokalny long i odpowiednio go dostosowujesz.

6

Zgodnie javadoc z convertLocalToUTC

Przekształca lokalnej błyskawicznej do standardowego UTC chwili z tej samej lokalnej czasie. Ta konwersja jest używana po wykonaniu obliczeń, gdzie obliczenia zostały wykonane przy użyciu prostej strefy lokalnej.

Metody nie ma założenie lub zatwierdzenia, która przeszła data jest w UTC czy nie, to zawsze rozważyć przeszedł datę jako lokalny i konwertuje do UTC. Twój wynik programu jest poprawny.