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???
問題は、JodaDateTime
をjava.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!
Note
JodaTimeのクイックスタート