2012-04-06 16 views
1

ローカルタイムゾーンで作成された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についてどう思いますか?それは生産のために十分安定していますか?

答えて

1

コードは正しく表示されます。 DateTimeFormat.parseを使用すると、カジュアルリーダーに意図が明確になる可能性があります。これは非常に頻繁に使用すると、タイムゾーンAとBと1つのDateオブジェクトを与えていることはありません、あなたはBでフォーマットする場合A.でフォーマットされたとき、オリジナルと同じ時間を持つ新しいDateオブジェクトを生成する必要が

mskTimeのタイムゾーンはまだ-0007です。私は将来、このオブジェクトをGoogle App Engineデータストアから逆シリアル化するときに問題が発生する可能性があるのだろうかと思います。

いいえ、問題はありません。 Dateオブジェクトは、タイムゾーンにバインドされていない普遍的な時点を表します。モスクワでは4月6日14時40分、カリフォルニアでは4月6日03時40分だから、Dateのオブジェクトは等しい。

関連する問題