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

标签 java postgresql jdbc jooq

我在 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/

相关文章:

jdbc - connection.close() 和 connection= null 之间的区别

mysql - 使用触发器在 PostgreSQL 中复制自动递增生成的字段

php - 如何在 PostgreSQL 9.1 中使用 pgFouine?

sql - PostgreSQL - 使用 If ELSIF 语句创建函数时出现语法错误

java - Linux 可用空间不正确

java - 如何在java jdbc应用程序的属性文件中编写复杂的sql查询

java - 比较两个不同表的两个结果集

java - 从 JSOUP 解析的 HTML 中删除转义文本

Java Android 在连接到服务器时加载微调器

java - 在 Eclipse 中查找具有给定参数类型的方法引用