我使用的是HSQLDB 2.4.0,并且返回了意外的TIMESTAMP WITH TIME ZONE
值。
我正在运行以下代码,其JVM时区为UTC + 2
try (Connection connection = this.dataSource.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(
"SELECT '1960-01-01 23:03:20+02:00' "
+ "FROM (VALUES(0))");
ResultSet resultSet = preparedStatement.executeQuery()) {
OffsetDateTime expected = OffsetDateTime.parse("1960-01-01T23:03:20+02:00");
while (resultSet.next()) {
assertEquals(expected, resultSet.getObject(1, OffsetDateTime.class));
assertEquals("1960-01-01 23:03:20+02:00", resultSet.getObject(1, String.class));
}
}
第二个断言成功但第一个断言失败。我得到1960-01-01T23:03:20+02:00
而不是预期的1960-01-01T21:03:20+02:00
值,而不是预期值的两小时。这是一个错误还是预期的行为?
修改
经过一些调查后,似乎不会减去本地时区的UTC偏移量,而是减去TIMESTAMP WITH TIME ZONE
的UTC偏移量。
如果我将'1960-01-01 23:03:20+02:00'
更改为CAST('1960-01-01 23:03:20+02:00' AS TIMESTAMP WITH TIME ZONE) + INTERVAL '2:00' HOUR TO MINUTE
,我会1960-01-01T21:03:20+02:00
。同样地'1960-01-01 23:03:20+05:00'
还有五个小时,但CAST('1960-01-01 23:03:20+02:00' AS TIMESTAMP WITH TIME ZONE) + INTERVAL '5:00' HOUR TO MINUTE
给了我1960-01-01T21:03:20+05:00
。
答案 0 :(得分:2)
这看起来像是为下一个版本修复的错误。您可以签出SVN / base / trunk代码并使用Gradle或Ant进行编译。