【问题标题】:Date time is wrong when retrieving timestamp from PostgreSQL database从 PostgreSQL 数据库中检索时间戳时日期时间错误
【发布时间】:2016-09-26 10:57:58
【问题描述】:

我有下表

CREATE TABLE mydate(id serial primary key, date timestamp);

数据库配置为 UTC 时区:

SHOW TIMEZONE;

 TimeZone 
----------
 UTC
(1 row)

我在表格中插入了一个测试日期,当我从表格中选择它时,我看到了以下结果(看起来是正确的):

db=# SELECT date FROM mydate;
         date         
---------------------
 2015-11-01 00:00:00 

现在,当我在 Clojure 中运行相同的查询时,我得到以下结果:

(q "SELECT date FROM mydate")  
=> [[#inst "2015-10-31T22:00:00.000000000-00:00"]]

结果是一个 java.sql.Timestamp 对象,看起来比它晚了 2 小时。如果我将对象转换为 JodaTime 并询问当前小时,我得到 22(我应该得到 0)。

但是,如果我使用 toString() 方法转换 java.sql.Timestamp 对象字符串,我会得到以下结果:

“2015-11-01 00:00:00.0”

为什么 java.sql.Timestamp 对象晚了 2 小时,为什么在将其转换为字符串时看起来是正确的?

【问题讨论】:

  • 我认为通常推荐使用timestamptz 代替timestamp。你有没有研究过这个选项?

标签: postgresql clojure


【解决方案1】:

我通常建议在 UTC 时间运行您的应用程序,并且仅在视图层中负责在正确的时区显示时间。尝试将 JVM 标志 user.timezone 设置为 UTC(如在 java -Duser.timezone=UTC ... 和/或在您的 project.clj 中::jvm-opts ["-Duser.timezone=UTC"])。

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2022-01-24
    • 2015-06-13
    • 2013-06-20
    • 2014-05-22
    • 1970-01-01
    • 2016-03-21
    • 2011-11-11
    相关资源
    最近更新 更多