開発者ドキュメント

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

`java.util.Date`を別のタイムゾーンに変換するためのhttp://www.joda.org/joda-time/[Joda Time]を使用するコードスニペット:

…​.//java.util.Date : 22-1-2015 10:15:55 AM//System TimeZone : Asia/Singapore
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.toDate();
System.out.println(dateInUS);//22-1-2015 10:15:55 AM – What???Why???

問題は、Jodaの `DateTime`を` java.util.Date`に戻すと、タイムゾーンはシステムのデフォルトのTimeZoneに戻ります!

=== 解決策

Javaでは、 `java.util.Date`はタイムゾーンを知らないので、` java.util.Date`がtoString()で印刷されると、システムのデフォルトのTimeZoneで日付が常に出力されます。

これを修正するには、まずDateTimeをJoda `LocalDateTime`に変換してください。

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!

** 注**  http://www.joda.org/joda-time/quickstart.html[Joda Timeですばやく開始]

link://tag/joda-time/[joda-time]link://タグ/タイムゾーン/[timezone]
モバイルバージョンを終了