ローカルタイムゾーンで作成されたDateオブジェクトのタイムゾーンをターゲットタイムゾーンにシフトするにはどうすればよいですか?
これが私が必要なものです。WebクライアントにDatePickerを使用して日付を選択させたいのですが、結果のDateオブジェクトは別のタイムゾーンで選択されたかのようになります。それを伝える方法がないのでDatePicker
、手動で日付をシフトする必要があります。
たとえば、現在カリフォルニアで2012年4月6日午前2時42分です。作成日はUTC-7タイムゾーンになります。ヨーロッパ/モスクワのタイムゾーンで2012年4月6日午前2時42分にDateオブジェクトが必要です。
これが私が今やっているところです:
final TimeZoneConstants constTz = GWT.create(TimeZoneConstants.class);
final TimeZone timeZoneMsk = TimeZone.createTimeZone(constTz.europeMoscow());
final TimeZone timeZoneCali = TimeZone.createTimeZone(constTz.americaLosAngeles());
Date curTime = new Date();
DateTimeFormat dateTimeFormat = DateTimeFormat.getFullDateTimeFormat();
Date mskTime = new Date(curTime.getTime() - (curTime.getTimezoneOffset() - timeZoneMsk.getStandardOffset()) * 60 * 1000);
String strLocal = dateTimeFormat.format(curTime, timeZoneCali); // Friday, 2012 April 06 02:42:59 Pacific Daylight Time
String strMsk = dateTimeFormat.format(mskTime, timeZoneMsk); // Friday, 2012 April 06 02:42:59 Moscow Standard Time
この方法には2つの問題があります。
- あなたが私に尋ねるならば、それはかなり奇妙に見えます。
- のタイムゾーン
mskTime
はまだ-0007です。今後、このオブジェクトをGoogle App Engineデータストアから逆シリアル化すると、問題が発生する可能性があるのではないかと思います。
Date
または、カリフォルニアの現地時間の完全な日付で文字列を生成し、文字列のタイムゾーンを置き換えてから、を呼び出して新しい文字列を生成する必要がありDateTimeFormat.parse()
ますか?それもかなりハッキーに見えます...
また、 JodaTime for GWTについてどう思いますか?生産には十分安定していますか?