来自ojdbc5&的时间戳问题ojdbc

时间:2013-12-05 11:22:20

标签: java ojdbc

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时间戳匹配。

1 个答案:

答案 0 :(得分:1)

我们几天前在我的公司遇到了同样的问题。最重要的是你永远不应该将时间戳作为字符串(因为它是特定于数据库/驱动程序),并始终使用SimpleDateFormat获取TimeStamp对象并以任何方式格式化它。

总是值得一提的是,javadocs

时间戳类是令人厌恶的
  

由于Timestamp类和。之间的差异   上面提到的java.util.Date类,建议代码不行   查看时间戳值通常作为java.util.Date的实例。   Timestamp和java.util.Date之间的继承关系   真的表示实现继承,而不是类型继承。