Я использую 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 местного часового пояса, а смещение UTC TIMESTAMP WITH TIME ZONE
.
Если я изменю '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
.