gpt4 book ai didi

java - jOOQ 在预期 UTC 时使用本地时区设置时间戳

转载 作者:行者123 更新时间:2023-12-02 05:22:48 26 4
gpt4 key购买 nike

在我的 jOOQ 配置文件中,我有这一行:

<javaTimeTypes>true</javaTimeTypes>

如果我在 HSQLDB 中创建此表:

CREATE TABLE T1 (C1 TIMESTAMP DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP NOT NULL);

生成的jOOQ代码是这样的:

public final TableField<T1Record, LocalDateTime> C1 =
createField("C1", org.jooq.impl.SQLDataType.LOCALDATETIME.nullable(false).
defaultValue(org.jooq.impl.DSL.field("LOCALTIMESTAMP",
org.jooq.impl.SQLDataType.LOCALDATETIME)), this, "");

我的 JVM 从 CET 时区开始,无论我在创建 DSLContext 之前是否将其设置为 GMT,在插入或更新行时(没有显式设置值),jOOQ 始终使用CET 时区。

直接使用 JDBC 时,时间戳会插入 GMT,这就是我想要的。
如何配置 jOOQ 才能达到相同的效果?

我正在使用 IntelliJ IDEA 检查数据库内容。

最佳答案

您使用了错误的数据类型。 LocalDateTime 无法表示时刻。它只是日期和一天中的时间,没有时区或与 UTC 的偏移量。

对于类似于 SQL 标准类型 TIMESTAMP WITH TOME ZONE 的数据库列,您应该使用 InstantOffsetDateTimeZonedDateTime 类。

Stack Overflow 上已经对此进行了多次介绍。搜索以了解更多信息。

请勿编写依赖于 JVM 或数据库当前默认时区的代码。通过显式传递可选参数来指定所需/预期的区域或偏移量。

关于java - jOOQ 在预期 UTC 时使用本地时区设置时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56248548/

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