2013-05-29 18 views
8

Sto cercando di convertire la data locale in UTC utilizzando Joda Time. Il codice che ho usato è mostrato qui sotto e funziona benissimo.JodaTime: conversione dell'ambiguità locale in UTC

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 

Ma, se io mando UTC Data come parametro al metodo DateTimeZone.convertLocalToUTC(), ma diminuisce anche l'ora per 3. Tuttavia, dal momento che è UTC Data, mi aspetto che non convertire di nuovo la data. È un bug o mi sto perdendo qualcosa?

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 

risposta

2

vedere le cose dal punto di vista convertLocalToUTC() metodi. Basta uno long e un boolean. Non ha alcuna conoscenza che il tempo che stai passando è UTC o no. Si presuppone che si passi un long che è ora locale e lo regola di conseguenza.

6

Come da javadoc di convertLocalToUTC

Converte un istante locale per un istante UTC di serie con lo stesso ora locale. Questa conversione viene utilizzata dopo aver eseguito un calcolo in cui il calcolo è stato eseguito utilizzando una semplice zona locale.

Metodi non fa assunzione o la convalida che passava data è in UTC o no, considera sempre data passata come locale e converte in UTC. L'output del tuo programma è corretto.

Problemi correlati