【发布时间】:2017-12-13 18:08:41
【问题描述】:
我用的是PostgreSQL 8.4,服务器是linux,linux的时区is'EDT'不是'UTC'。 PostgreSQL 的配置使数据库的时区为'UTC'。代码在 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”。
DB中的原始值为“2017-07-10 02:02:25.268+00”。
linux服务器时区在代码层面造成的影响如何处理?
顺便说一句,我知道另一种解决方案,更改 jboss 的启动脚本,以使 jboss 使用时区“UTC”启动。这个问题可以在代码层面处理吗?
【问题讨论】:
-
java 的
LocalDateTime应该能够做到这一点 -
但是resultSet中的值类型是'String'
-
如果数据库列是日期/日期时间,那么它将在结果集中有日期或时间戳之类的东西
-
抱歉没提,DB中的列类型是时间戳,但我想获取格式化的日期,而不是原始值。并且格式化的日期是'String',原始值是'timestamp'
-
取原始值,转换成
java.util.Date,然后调用d.setHours(d.getHours()-4);,然后解析成字符串
标签: java postgresql jdbc timezone timestamp-with-timezone