ローカルタイムゾーンで作成されたDateオブジェクトのタイムゾーンをターゲットタイムゾーンに移動するにはどうすればよいですか?ローカルタイムゾーンで作成されたDateオブジェクトのタイムゾーンを、GWTクライアントのタイムゾーンをターゲットに移動するにはどうすればよいですか?
ここに私が必要なものがあります。私はWebクライアントがDatePickerを使用して日付を選択したいが、結果のDateオブジェクトは別のタイムゾーンで選択されたようにのように見えるはずです。 DatePicker
にこれを行うよう指示する方法がないので、手動で日付をシフトする必要があります。
たとえば、今は4月6日2012 2:42 AMです。作成日はUTC-7タイムゾーンになります。ヨーロッパ/モスクワのタイムゾーンで2012年4月6日2:42 AMの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
この方法には二つの問題があります。
- あなたは私に言わせればそれはかなり奇妙に見えますが。
mskTime
のタイムゾーンはまだ-0007です。私は将来、このオブジェクトをGoogle App Engineデータストアから逆シリアル化するときに問題が発生する可能性があるのだろうかと思います。
または私はちょうど、地元カリフォルニア時間の完全な日付の文字列を生成した文字列にタイムゾーンを交換してからDateTimeFormat.parse()
を呼び出して新しいDate
を生成する必要がありますか?それはあまりにもハッキーに見えます...
また、JodaTime for GWTについてどう思いますか?それは生産のために十分安定していますか?