我们正在升级到Oracle 12c,因此正在使用ojdbc7(12.1.0.2.0)驱动程序。但是我们注意到,在使用resultSet.getString(" DATE_COLUMN")从表中获取DATE列时,它现在也返回DayLight Saving调整时间。请注意,该数据库位于美国中部时区。
比如说。
如果最初插入的列中的日期是" 2014-03-09 02:30:00"这就是2014年美国夏令时开始的那一天。
以下是用于获取此值的代码行。
String sql = "SELECT DATE_COLUMN FROM A_TABLE";
ResultSet rs = psmt.executeQuery(sql);
while (rs.next())
{
String dateString = rs.getString("DATE_COLUMN");
}
以下是此代码段与2种不同驱动程序的结果。
odjbc6(11.2.0.3.0) - 2014-03-09 02:30:00
ojdbc7(12.1.0.2.0) - 2014-03-09 03:30:00.0
如果您看到突出显示的时间字段,您可以看到它现在使用ojdbc7驱动程序获取3:30:00.0而不是2:30,这表明驱动程序正在获取当地时区的夏令时调整时间数据库服务器,在我们的例子中是美国的CST。
我得到的部分是附加此链接ResultSet.getString(Date) differs based on driver
中提到的小数秒问题是我们不需要夏令时调整时间,但需要最初插入的时间。但是,使用其他方法获取日期(如resultSet.getDate()),resultSet.getTimeStamp()也会返回DST调整时间。
我们发现唯一的出路是将日期列的类型更改为TIMESTAMP并解决问题。
有没有人遇到过oracle 12c(ojdbc7)驱动程序的这个问题?
如果是,是否有更好的解决方法?我真的想避免将现有列的数据类型更改为TIMESTAMP。
答案 0 :(得分:0)
遇到同样的问题。我使用rs.getString(index)
来避免Date
类型的夏令时调整,但使用ojdbc7时,rs.getString(index)
也会调整夏令时。