gpt4 book ai didi

java - 写入 Oracle 时使用 java.util.Date 时区问题

转载 作者:行者123 更新时间:2023-11-30 09:50:26 26 4
gpt4 key购买 nike

设置

  • Web 应用程序在机器 A 上运行,系统时间设置为 GMT
  • Oracle 数据库在机器 B 上运行,系统时间设置为 GMT。 (从双重显示中选择 dbtimezone +0:00)

问题

Web 应用程序使用 Hades JPA 和 Hibernate 来写入和读取数据库。一个表有两列时间戳类型,分别称为 CREATED 和 MODIFIED。 Web 应用程序使用 joda DateTime 获取 java.util.Date 对象并将其写入数据库。第一次创建条目时一切正常,两个字段的时间都设置为 GMT。但是一旦同一行得到更新,MODIFIED 列就会在 PST 中设置。

它是在创建期间和修改期间执行以设置日期值的同一代码部分(如上所述,它尝试从 joda DateTime 获取 java.util.Date)。

有人可以解释这种行为吗?

我注意到的另一件事是在上面的设置中,如果在 Web 应用程序中我使用 new Date() 设置日期列,它将在 PST 中设置。当应用程序和数据库都在设置为 GMT 的机器上运行时,我不知道从哪里获取时区作为 PST。

编辑:TimeZone.getDefault() 在两台机器上打印 GMT。

最佳答案

通过调用 java.util.TimeZone.getDefault() 检查 JVM 认为它正在运行的时区。这将是它从您的 jdbc 驱动程序读取时应用于日期的时区。虽然我使用过 hibernate ,但我不确定它在时区上有什么可配置性。不过,我会说它在后台调用 java.sql.ResultSet.getDate()。此函数有一个重载 getDate(String columnLabel, Calendar cal),它允许您指定它从数据库中读取的列的时区。这可能是问题的根本原因。如果 Hibernate 通过 getDate(String columnLabel) 调用默认值,那么问题很可能是您的 JVM 认为它所在的时区不是 GMT。

关于java - 写入 Oracle 时使用 java.util.Date 时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com