DateTimeをDateに変換しますが、TimeZoneはありませんか?

DateTimeをDateに変換しますが、TimeZoneがありませんか?

Joda Timeを使用してjava.util.Dateを別のタイムゾーンに変換するコードスニペット:

//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???

問題は、JodaDateTimejava.util.Dateに戻すと、タイムゾーンがシステムのデフォルトのTimeZoneに戻ることです!?

溶液

Javaでは、java.util.Dateはタイムゾーンを認識しません。java.util.DateがtoString()で出力される場合、システムのデフォルトのTimeZoneで常に日付が出力されます。

これを修正するには、最初にDateTimeを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!