2 回答
TA贡献1895条经验 获得超3个赞
这不是 jOOQ 问题。PostgreSQL 没有与ZonedDateTime
. 它的TIMESTAMPTZ
orTIMESTAMP WITH TIME ZONE
类型实际上只是一个java.time.Instant
.
对于带时区的时间戳,内部存储的值始终采用 UTC(通用协调时间,传统上称为格林威治标准时间,GMT)。指定了显式时区的输入值将使用该时区的适当偏移量转换为 UTC。如果输入字符串中未指定时区,则假定其处于系统 TimeZone 参数指示的时区,并使用时区的偏移量将其转换为 UTC。
jOOQ 无法为您做任何事。
请注意,jOOQ 默认将TIMESTAMP WITH TIME ZONE
所有 SQL 数据库中的类型映射到java.time.OffsetDateTime
,因为这就是 JDBC 规范的作用。对于像 JDBC(和 jOOQ)这样的供应商无关的 API,这是一个合理的默认值。但如果您想拥有 PostgreSQL 原生行为,我建议您将所有TIMESTAMPTZ
类型重写为INSTANT
(如果您使用的是 jOOQ 3.12+)。
如果由于某种原因,您需要维护此信息,则需要将其存储在单独的列中,或text
作为格式化值存储在列中。
TA贡献1859条经验 获得超6个赞
impossibl pgjdbc 驱动程序版本 0.7.1 和 jOOQ 之间存在不兼容性,导致在从 postgres 数据库中选择带时区的时间戳时不应用偏移量。
万一其他人也在运行这个 jar 组合,如果 impossibl 驱动程序中的功能是必要的,建议更新到 pgjdbc 0.8.2,如果不需要,则放弃。
添加回答
举报