使用 jdbc 从 postgresql 查询时间列

Query time column from postgresql using jdbc

我正在使用 PostgreSQL 8.4,服务器是 linux,linux 的时区不是 is'EDT' 'UTC'。 PostgreSQL 的配置使数据库的时区为'UTC'。密码是 运行ning on JBoss9.

我有一个sql,select to_char(ts_entry.submitted_date, 'MM/DD/YYYY HH24:MM') as submitted_date_format from ts_entry where ....

如果我们 运行 PostgreSQL 中的 sql,我们将得到值“07/10/2017 02:07

但是当我尝试从 java 中的 resultSet 获取值时,

Statement st = connection.createStatement(); 
ResultSet rs = st.executeQuery(sql); 
String value = rs.getString("submitted_date_format");

该值将为“07/09/2017 22:07”。 数据库中的原始值为“2017-07-10 02:02:25.268+00”。

如何在代码级别处理 linux 服务器时区造成的影响?

顺便说一句,我知道一个替代解决方案,更改 jboss 的启动脚本,使 jboss 使用时区 'UTC' 启动。这个问题可以在代码级别处理吗?

数据库服务器计算机的时区对行为没有直接影响,除了它用于在 postgresql.conf 中初始化 timezone,这是客户端时区的初始设置,除非被覆盖通过数据库会话。

PostgreSQL 在内部以 UTC 存储 timestamp with time zone 并在交付时将其转换为客户端的本地时区。

所以你应该按照你需要的方式设置数据库会话时区

SET TIME ZONE '<time zone name>';

当您 select 然后从 PostgreSQL 将日期转换为该时区。