postgresql - 从 PostgreSQL 数据库检索时间戳时日期时间错误

标签 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 小时,为什么在将其转换为字符串时看起来是正确的?

最佳答案

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

关于postgresql - 从 PostgreSQL 数据库检索时间戳时日期时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39701045/

相关文章:

recursion - Clojure - 使用 recur 与普通递归函数调用

clojure - Clojure 中以最大值分割向量——更好的方法?

emacs - 如何配置 CIDER repl?

clojure - Clojure 中序列的惰性串联

rest - 可以在 clojure 中使用像 jersey 这样的休息框架而不是 compojure

node.js - 使用 pg-promise 记录特定的 postgresql 查询

sql - 在 SQL (Postgresql) 中检查是否可以预订

postgresql - psql版本和postgresql版本不匹配怎么办?

xml - 如何在 OpenERP7 中通过 XML 添加值?

postgresql - 请求了未知的数据库类型 tsvector