gpt4 book ai didi

java - UTC 时间戳 -> java.sql.Timestamp -> jOOQ -> postgreSQL 中的本地时间戳?

转载 作者:行者123 更新时间:2023-11-29 12:09:48 25 4
gpt4 key购买 nike

我在 GMT+1 时区,我在 long 变量中有一个 UTC 时间戳 (11:12:56)。

long ts = 1487157176450;

我从这个时间戳中初始化一个 java.sql.Timestamp

Timestamp timestamp = new Timestamp(ts);

然后,我使用 jOOQ 将这个时间戳插入到 PostgreSQL (v9.4) 数据库中。

create.insertInto(TABLE,
TABLE.NAME, TABLE.TS)
.values("Foo bar", timestamp);

但是,当我记录实际执行的 SQL 命令时,我看到了:

< 2017-02-15 10:50:37.326 CET >LOG:  execute <unnamed>: insert into "database"."table" ("name", "ts") values ($1, cast($2 as timestamp))
< 2017-02-15 10:50:37.326 CET >DETAIL: parameters: $1 = 'Foo bar', $2 = '2017-02-15 12:12:56.450'

我不完全确定时间戳是从哪里变成本地时间戳的,但除非 pgAdmin 撒谎,否则我实际上确实在数据库中存储了 GMT+1 时间戳,而不是我想要的 UTC。

现在我没有使用 JDBC,所以链接问题的答案没有帮助。如何让 jOOQ 存储正确的时间戳?

最佳答案

Timestamp 类本身对时区一无所知

换句话说:它假设传入的值是UTC。

但是当时间戳被进一步处理时(没有特别设置),从时间戳对象“检索”并插入数据库的值会考虑您的当前区域设置。

可以看看here进一步思考。 Mikael Valot 的回答给出了一些示例,您可以如何检索要传递给有关时区的 TimeStamp 构造函数的 long 值。

关于java - UTC 时间戳 -> java.sql.Timestamp -> jOOQ -> postgreSQL 中的本地时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42248170/

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