【发布时间】:2019-05-31 09:42:43
【问题描述】:
我有一个包含 Date 列的 Oracle 表。
+--------+-----------------------+
| ID | CURR_DATE |
+--------+-----------------------+
| 1 |2003-04-06 02:59:59 |
+--------+-----------------------+
当我做一个
select * from tablename
在数据库控制台中,我得到了正确的 CURR_DATE 列值。
但是,当我在使用 JDBC 的 java 程序中执行相同操作时,由于夏令时,时间会提前一小时。这是一个解释它的链接。 https://www.timeanddate.com/time/change/usa/new-york?year=2003。
所以我收到的值是 2003-04-06 03:59:59 而不是 2003-04-06 02:59:59。
发生这种情况是因为 DB 和 JVM 在 PST 中,而 PST 遵循 DST。(如果我错了,请纠正我)
这是我的代码
String query="select * from tablename";
PreparedStatement psmt = con.prepareStatement(query);
ResultSet results=psmt.executeQuery();
while(results.next()) {
System.out.println(results.getString(2));
}
可以做些什么让results.getString()返回我与数据库中相同的值(不做任何调整)。
我希望它返回原始值 2003-04-06 02:59:59 而不是调整后的值 2003-04-06 03:59:59 >.
【问题讨论】:
-
为什么不在 UTC 上工作并在您的代码中管理 DST?
-
@HimanshuBhardwaj 更多解释可能会有所帮助。为什么不帮忙回答?我对这些时区术语不太了解。
-
或许可以试试
results.getObject(2, LocalDateTime.class) -
@HimanshuBhardwaj UTC 或 DST 都不重要,因为 Oracle
DATE类型仅包含日期和时间,没有任何时区概念或与 UTC 的偏移量。
标签: java oracle datetime jdbc timezone