OJDBC6和OJDBC8之间的带时区的时间戳不同

问题描述

我确实对OJDBC8有问题。不久前,我决定从OJDBC6-> OJDBC8切换到某些功能,然后停止工作。我有一个带有GMT-4和所有其他属性的Calendar对象。当我使用OJDBC6时,下面的代码可以正常工作,将TIMESTAMP调整为时区。

rs.getTimestamp(1,calendar)

使用OJDBC8且未调整与上面相同的代码时,基本上不会更改时间戳,它的值与数据库中的值相同。我检查了OJDBC8代码,版本6和8之间的逻辑不同。我不明白为什么我们将日历对象传递给getTimestamp()方法,但是在OJDBC8中甚至没有使用它。

解决方法

请注意,ojdbc8的Java编译器级别是Java-8,而ojdbc6的Java编译器级别是Java-6。在Java-8中,引入了a completely new date-time API。传统的日期时间API(java.util)容易出错,使用它们的代码曾经很复杂且难以理解。

您应该使用现代的日期时间API(java.time)并执行以下操作:

OffsetDateTime odt = rs.getObject(1,OffsetDateTime.class);

通过 Trail: Date Time

了解有关现代日期时间API的更多信息

为切换到现代日期时间API而进行的更改将是值得的,并将长期为您提供帮助。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...