如何从 Java 在 mssql 数据库中保存 UTC 日期 (JPA)

How to save UTC date in mssql database from Java (JPA)

提问人:Viktor Eriksson 提问时间:11/3/2023 最后编辑:Viktor Eriksson 更新时间:11/7/2023 访问量:35

问:

我希望我的数据库中的日期时间(或其他类型)(在我的情况下是 MsSql)是 UTC 格式。

在我的 java 后端中,我尝试将其作为 Date 或 OffsetDateTime 接收并将其传递给我的数据库。 但无论如何,我最终都会在数据库中找到一个本地日期。

因此,在我的应用程序中输入日期时,我的本地时间是 17:22:15。 我将其作为字符串“2023-11-02T16:22:15.441815Z”发送ISO8601。(我目前的偏移量是 +1/瑞典)

在撰写本文时,我当前的 Java 实体字段如下所示:

@Column(name = "measureCreateDate")
private OffsetDateTime measureCreateDate;

如果我在 Java 端调试和检查代码,我会看到以下内容:enter image description here

但它在数据库中是这样的(当前类型是 datetimeoffset)(忽略所有 NULLS):

Ignore all the NULLS

在这里,我希望看到“2023-11-02 16:22:15.4418150 +00:00”而不是“2023-11-02 17:22:15.4418150 +00:00”

我该怎么做?

这是一个在 Java 8 上运行的旧应用程序,如果这有什么不同的话。它运行在 Glassfish 应用服务器上,该服务器在后台使用 EclipseLink。

我看到了某种持久性.xml属性:

<property name="hibernate.jdbc.time_zone" value="UTC"/>

但是,由于这是一个旧应用程序,并且正在使用许多其他日期时间字段,我担心这会扰乱当前的功能。

更新1:

JPA 的版本是 2.7.0

Glassfish 的版本是 5.1.0

SQL Server 的版本为 15.0.2104

measureCreateDate 的数据库类型为 datetimeoffset

enter image description here

Java JPA 时区

评论

0赞 Turing85 11/3/2023
如何定义数据库列? ?DATETIMEOFFSET
0赞 Viktor Eriksson 11/3/2023
是的。更新了问题,提供了更多信息
0赞 Viktor Eriksson 11/3/2023
@BasilBourque,更新了一些附加信息

答: 暂无答案