JVM时区详情:印度标准时间亚洲/加尔各答019800000
数据库时区详情:Central Standard TimeAmerica / Chicago3600000-21600000
示例代码:
String sql = "select systimestamp as base from dual";
....
PreparedStatement stmt = con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
System.out.println(rs.getTimestamp("base"));
System.out.println(rs.getString("base"));
}
试验1: 我使用ojdbc14.jar 10.1.0.3.0测试,它按预期工作打印db time
输出:
2013-12-05 01:23:57.141583
2013-12-5 1.23.57.141583000 -6:0
试验2: 我测试使用ojdbc5.jar& ojdbc6.jar 11.2.0.3.0 with,getTimestamp打印本地时间,其中getString打印db time。
输出:
2013-12-05 12:57:54.3508
2013-12-05 01:27:54.3508 -6:00
请告知Test-2 ojdbc驱动程序版本11.2.0.3.0有什么问题,其中getTimestamp()打印本地时间。我的应用程序期望在getTimestamp()中的db-time像Test-1,它与DB时间戳匹配。
答案 0 :(得分:1)
我们几天前在我的公司遇到了同样的问题。最重要的是你永远不应该将时间戳作为字符串(因为它是特定于数据库/驱动程序),并始终使用SimpleDateFormat
获取TimeStamp对象并以任何方式格式化它。
总是值得一提的是,javadocs
时间戳类是令人厌恶的由于Timestamp类和。之间的差异 上面提到的java.util.Date类,建议代码不行 查看时间戳值通常作为java.util.Date的实例。 Timestamp和java.util.Date之间的继承关系 真的表示实现继承,而不是类型继承。