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

UTC offset subtracted from TIMESTAMP WITH TIME ZONE value in HSQLDB

我正在使用 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:001960-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.

这看起来像是一个已在下一个版本中修复的错误。您可以签出 SVN /base/trunk 代码并使用 Gradle 或 Ant.

进行编译