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!