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());

...以反映更新发生在“现在”。

有两个 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 以将日期存储为长(UTC / 纪元时间)而不是日期对象(UTC = myDate.getTime()),并转换为日期以用于显示目的。决定这是太多的代码更改。

(b) 在写入数据库之前将我的 Date 对象中的时间转换为 GMT。也决定反对这一点,因为这种转换发生在太多地方,我敢肯定一些未来的开发人员会搞砸它或忘记在未来的代码增强中添加它。

(c) 我将开发网络服务器的时区设置为 GMT,在此处找到说明。

我选择了(c)。

于 2013-03-08T17:25:30.550 回答