DateTime in Date konvertieren, aber TimeZone fehlt?
Ein Code-Snippet zur Verwendung vonJoda Time zum Konvertieren vonjava.util.Date
in eine andere Zeitzone:
//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???
Das Problem ist, wenn Sie die JodaDateTime
injava.util.Date
zurückkonvertieren, wird die Zeitzone auf die Standard-Zeitzone des Systems zurückgesetzt!?
Lösung
In Java kenntjava.util.Date
die Zeitzone nicht. Wenn einjava.util.Date
mit toString () gedruckt wird, wird das Datum immer mit der Systemstandardzeitzone gedruckt.
Um dies zu beheben, konvertieren Sie DateTime zuerst in 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!