HSQLDB 2.4.0を使用していて、予期せぬTIMESTAMP WITH TIME ZONE
の値が返されています。HSQLDBのTIMESTAMP WITH TIME ZONE値からUTCオフセットを引いた
私は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));
}
}
二アサーションが成功しますが、最初に失敗したのJVMの時間帯で、次のコードを実行しています。予想される1960-01-01T23:03:20+02:00
の値の代わりに、期待値の2時間前の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'
は5時間オフですが、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
を与えます。