0

Java EE 5アプリケーション(IBM RAD、WebSphere 7.5、Oracle 11)があります。

JPAを使用してアプリで日付を読み書きしています。次のようになります。

@Entity
@Table="APPOINTMENT"
public class Appointment implements Serializable {
  /* ... */
  @Temporal(TemporalType.TIMESTAMP)
  private Date lastUpdateTimestamp;
  /* ... */
}

アポイントメントを更新するたびに、私は...

myAppointment.setLastUpdateTimestamp(new Date());

...更新が「今」行われたことを反映します。

2つのWebSphereサーバーがあり、どちらも同じデータベースを指しています。

ローカル開発マシンのWebSphereが更新時刻を保存すると、「今」は次のように保存されます。

March 7, 2013 1:30pm EST

本番サーバーが更新時刻を保存すると、「今」は次のように保存されます。

March 7, 2013 6:30pm GMT

問題は、タイムゾーンがタイムスタンプの一部として保存されていないように見えることです。したがって、ローカル(EST)マシンでアプリケーションを参照すると、時刻は次のように表示されます。

March 7, 2013 6:30pm EST 

...あなたが私をフォローしているなら、これは実際には5時間先です。

私の質問は、Dateオブジェクトの日付と時刻とともにタイムゾーンをデータベースに保存するにはどうすればよいですか?

どんな情報でも役に立ちます、ありがとう!

ロブ

4

1 に答える 1

1

正解は、タイムゾーンがOracle TIMESTAMPフィールドに格納されていないだけであり、これを実現する方法がないということです。保存する前に、日付を正しい値に変換する必要があります。

記録のために、私が検討した回避策は次のとおりです。

(a)すべてのエンティティBeanを変更して、日付をDateオブジェクト(UTC = myDate.getTime())ではなくlong(UTC /エポックタイム)として格納し、表示目的で日付に変換します。コードの変更が多すぎると判断しました。

(b)データベースに書き込む前に、Dateオブジェクトの時刻をGMTに変換します。その変換はあまりにも多くの場所で行われるため、これにも反対しました。将来の開発者がそれを台無しにするか、将来のコード拡張で追加するのを忘れると確信しています。

(c)開発用ウェブサーバーサーバーのタイムゾーンをGMTに設定しました。手順については、こちらをご覧ください。

私は(c)と一緒に行きました。

于 2013-03-08T17:25:30.550 に答える