JVM时区详细信息:印度标准时区/卡尔切卡019800000
DB时区详细信息:中央标准时间美洲/芝加哥3600000-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时间一样工作。
输出:
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和getTimestamp打印本地时间,作为getString打印db时间进行了测试。
输出:
2013-12-05 12:57:54.3508
2013-12-05 01:27:54.3508 -6:00 请建议Test-2ojdbc驱动程序11.2.0.3.0版本有什么问题,其中getTimestamp()打印本地时间。我的应用程序期望使用与db时间戳匹配的DB时间,比如getTimestamp()中的Test-1。
发布于 2013-12-05 11:26:48
几天前我们在我的公司也有过同样的问题。这样做的底线是,永远不要以字符串的形式获得时间戳(因为它是特定于数据库/驱动程序的),并且始终获取timestamp对象,并以任何方式使用SimpleDateFormat对其进行格式化。
值得一提的是,时间戳类是javadocs中令人厌恶的
由于上面提到的时间戳类与java.util.Date类之间的差异,建议代码不要将时间戳值一般视为java.util.Date的实例。时间戳和java.util.Date之间的继承关系实际上是表示实现继承,而不是类型继承。
https://stackoverflow.com/questions/20398665
复制相似问题