2

私はMultiTimeZoneや現地の日付の経験があまりないので、これに手を汚していますが、どのように、どこから始めればよいのかわからないので、優しくしてください:-)

2種類のDate(Time)フィールドがあります。

  1. 日付(日、月、年の保存)
  2. DateTime(1と同じですが、時間を含みます)

Playでプロパティをどのように定義する必要がありますか?

 @Formats.DateTime(pattern="MM-dd-yyyy")
 public Date reqCompletionDate;

または、JodaTimeを使用する必要があります(これまで使用したことはありません):

@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
public DateTime reqCompletionDate;

に行く場合java.util.Date、どうすればローカルのユーザーDate format(つまり、yyyy-MM-dd)に変換できますか?フォーマットの問題が原因で自動バインドの再生が失敗するので、カスタムバインダーを作成する必要がありますか?Dateこれは私のすべての分野に影響しますよね?

または、すべてのDate(Time)フィールドにgetterとsetterを使用して、ユーザーLocaleに正しい時刻を取得できるようにすることをお勧めします。この場合、Playの自動バインドは失敗しますが、それでもとのカスタムバインダーが必要にDateなりDateTimeますか?

それとも私はこれをすべて考えすぎていて、これを別の方法で処理する必要がありますか?あなたの考えをありがとう!

UPDATE: 2012-07-23: I think I will follow these steps:

ステップ1:再生を開始し、UTCタイムゾーンで初期化します

ステップ2:UTCタイムゾーンに従って、すべての日時フィールドを同じ形式にします

ステップ3:できるだけ遅くユーザーの現地時間に変換する

ユーザーが変換を含むフォームを投稿local date (time)すると、できるだけ早くUTC時間に変換されます。時間があれば、ここにコードを投稿します。

4

1 に答える 1

2

つまり、JodaTimeを使用します。java.util.Dateは静かなフィールドに持ち込まれ、最後のタバコを与えられ、撃たれるべきです。

長いバージョン:

マルチロケールは、正しく理解するのが複雑になる可能性があり、ユーザーのタイムゾーンで日付と時刻を表示するだけの問題ではありません。

考慮する必要があることのいくつかの例:

  • オーストラリアのタイムゾーンでレンダリングされた場合、あなたの誕生日は1日早くなりますか?
  • ユーザーが火曜日に発生したことをサポート担当者に伝えたが、サポート担当者の火曜日が+ 7時間である場合、彼はログでそれを見つけますか?
  • 17日のセールはどの深夜に開始する必要がありますか?

java.util.Dateは、単一の瞬間を表すことに制限されています。そのため、このようなシナリオに対処するのは非常に困難です。それが日付を表しているのか、日時を表しているのかを調べてもわかりません。

Jodaは、これらの個別の概念に個別のタイプを提供しているため、それらの操作がはるかに簡単になります。たとえば、LocalDateにはタイムゾーンや時間コンポーネントはありません。あなたの誕生日はLocalDateなので、変更されることはありません。DateTimesは別のタイプとして表されます。間隔、期間などの他の概念のタイプもあり、時間と日付の比較がはるかに簡単になります。まれに、グレゴリオ暦を使用していないロケールをサポートする必要がある場合は、年表を簡単に交換できます。

JPAを使用している場合、Joda用のアダプターが存在し、機能します。また、他の場所で使用する必要がある場合、Jodaはjava.util.Dateとの相互運用性を提供します。

于 2012-07-22T23:17:10.697 に答える