2015-02-01 1 views
16

내가 연구 할 수있는 한 UTC와 줄루는 동일합니다. 그러나 나는 코드에서 여러 소스에서받은 두 개의 ZonedDateTimes를 비교하는 데 어려움을 겪고 있습니다. 다음 코드는 문제를 보여줍니다 :Java 8의 UTC와 Zulu 시간이 동일합니까?

@Test 
public void equalsOnTimezone() throws Exception { 
    ZonedDateTime zdtUtc = ZonedDateTime.of(2015, 2, 1, 14, 30, 0, 0, ZoneId.of("UTC")); 
    ZonedDateTime zdtZ = ZonedDateTime.of(2015, 2, 1, 14, 30, 0, 0, ZoneId.of("Z")); 
    assertEquals(zdtUtc, zdtZ); // will fail 
} 

문제 :

java.lang.AssertionError: expected:<2015-02-01T14:30Z[UTC]> but was:<2015-02-01T14:30Z> 

그리고 무엇을 만든 다음 UTC를 기반으로 값을 비교하는 올바른 방법이 될 것인가? W3C Date and Time Formats에 따르면

:

시간이 특별한 UTC 지정자 ("Z")로, UTC (국제 표준시)로 표현된다.

답변

19

소스 코드에 따라, ZonedDateTime.equals는 영역 ID 성분을 비교 ZoneId.equals를 사용하고, 차례로 즉, IDS 아닌 오프셋을 비교한다. 당신이 동등한 비교 "다른 있지만 해당"존 ID를 가진 두 개의 ZonedDateTime를 원하는 경우

,이처럼 그들을 만들어야합니다

ZonedDateTime zdtUtc = ZonedDateTime.of(
    2015, 2, 1, 14, 30, 0, 0, ZoneId.of("UTC").normalized()); 
ZonedDateTime zdtZ = ZonedDateTime.of(
    2015, 2, 1, 14, 30, 0, 0, ZoneId.of("Z").normalized()); 

나는이 경우라고 생각 어디 W3C에 따라 기대 (문자열 표현에 대한 문서)는 Java 클래스의 문서화 된 의미와 일치하지 않습니다. 이러한 경우 javadoc은 결정적입니다.

(이 IMO, 자바 (8) 버그가 아닙니다.) 두 순간이 동일하므로

+0

또 다른 옵션은, 인스턴트 각 ZonedDateTime을 변환하는 것입니다. – VGR

+0

예 ... 그게 당신이 성취하려고 시도하는 것이라면. –

관련 문제