从PostgreSQL数据库中检索时间戳时,日期时间错误

时间:2016-09-26 10:57:59

标签: postgresql clojure

我有下表

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小时以及将其转换为字符串时为什么看起来正确?

1 个答案:

答案 0 :(得分:3)

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