DateTime in Date konvertieren, aber die Zeitzone fehlt?

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!