Convertir DateTime en Date, mais TimeZone est manquant?

Convertir DateTime en Date, mais TimeZone est manquant?

Un extrait de code à utiliserJoda Time pour convertir unjava.util.Date en un fuseau horaire différent:

//java.util.Date : 22-1-2015 10:15:55 AM
//System TimeZone : Asia/Singapore

//Convert java.util.Date to America/New_York TimeZone
DateTime dt = new DateTime(date);
DateTimeZone dtZone = DateTimeZone.forID("America/New_York");
DateTime dtus = dt.withZone(dtZone); //21-1-2015 09:15:55 PM - Correct!

//Convert Joda DateTime back to java.util.Date, and print it out
Date dateInUS = dtus.toDate();
System.out.println(dateInUS); //22-1-2015 10:15:55 AM - What???Why???

Le problème est que si vous reconvertissez le JodaDateTime enjava.util.Date, le fuseau horaire reviendra à la zone horaire par défaut du système !?

Solution

En Java,java.util.Date ne connaît pas le fuseau horaire. Si unjava.util.Date est imprimé avec toString (), il imprimera toujours la date avec le fuseau horaire par défaut du système.

Pour résoudre ce problème, convertissez d'abord DateTime en JodaLocalDateTime.

DateTime dt = new DateTime(date);
DateTimeZone dtZone = DateTimeZone.forID("America/New_York");
DateTime dtus = dt.withZone(dtZone); //21-1-2015 09:15:55 PM - Correct!

Date dateInUS = dtus.toLocalDateTime().toDate();
System.out.println(dateInUS); //21-1-2015 09:15:55 PM - Correct!