2017-05-07 11 views
2

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이됩니다. 이것은 버그입니까, 예상되는 동작입니까?

좀 더 조사 후 편집

는 로컬 시간대하지만 TIMESTAMP WITH TIME ZONE의 오프셋 UTC 오프셋 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이라고합니다.

답변

2

이것은 다음 릴리스에서 수정 된 버그처럼 보입니다. SVN/base/trunk 코드를 체크 아웃하고 Gradle 또는 Ant로 컴파일 할 수 있습니다.