gpt4 book ai didi

java - 来自 ojdbc5 和 ojdbc 的时间戳问题

转载 作者:行者123 更新时间:2023-11-30 11:25:11 27 4
gpt4 key购买 nike

JVM 时区详细信息: 印度标准时间亚洲/Calcutta019800000

数据库时区详细信息:美国中部标准时间/芝加哥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 进行了测试,它按预期打印数据库时间

输出:

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-2 ojdbc 驱动程序版本 11.2.0.3.0 有什么问题,其中 getTimestamp() 打印本地时间。我的应用程序期望 getTimestamp() 中的 Test-1 之类的数据库时间与数据库时间戳匹配。

最佳答案

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

总是值得一提的是,Timestamp 类是一个可憎的东西,来自 javadocs

Due to the differences between the Timestamp class and the java.util.Date class mentioned above, it is recommended that code not view Timestamp values generically as an instance of java.util.Date. The inheritance relationship between Timestamp and java.util.Date really denotes implementation inheritance, and not type inheritance.

关于java - 来自 ojdbc5 和 ojdbc 的时间戳问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20398665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com