从HSQLDB中的TIMESTAMP WITH TIME ZONE值中减去UTC偏移量

时间:2017-05-07 18:39:42

标签: java jdbc timezone hsqldb timestamp-with-timezone

我使用的是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

1 个答案:

答案 0 :(得分:2)

这看起来像是为下一个版本修复的错误。您可以签出SVN / base / trunk代码并使用Gradle或Ant进行编译。