Java 从时间戳中减去UTC偏移量,时区值以HSQLDB为单位
我正在使用HSQLDB2.4.0,并看到返回了带有时区值的意外Java 从时间戳中减去UTC偏移量,时区值以HSQLDB为单位,java,jdbc,timezone,hsqldb,timestamp-with-timezone,Java,Jdbc,Timezone,Hsqldb,Timestamp With Timezone,我正在使用HSQLDB2.4.0,并看到返回了带有时区值的意外时间戳 我使用UTC+2的JVM时区运行以下代码 try (Connection connection = this.dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement( "SELECT '1960-01-01 23:03:20+02:00' "
时间戳
我使用UTC+2的JVM时区运行以下代码
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
。这是一个bug还是预期的行为
编辑
经过进一步调查,似乎不是本地时区的UTC偏移量,而是带有时区的时间戳的UTC偏移量
如果我将'1960-01-01 23:03:20+02:00'
更改为CAST('1960-01-01 23:03:20+02:00'作为带时区的时间戳)+间隔'2:00'小时到分钟
我得到1960-01-01T21:03:20+02:00
。同样地,'1960-01-01 23:03:20+05:00'
也有五个小时的休息时间,但是将('1960-01-01 23:03:20+02:00'作为带时区的时间戳)+时间间隔'5:00'每分钟
给了我1960-01-01T21:03:20+05:00
这看起来像是一个在下一版本中修复的错误。您可以签出SVN/base/trunk代码,并使用Gradle或Ant进行编译