2016-10-12 3 views
4

Java 8 시간 API에서 가을 (중부 유럽 표준시)의 DST 시간 변경 중 시간 중첩 부분에 속하는 LocalDateTime을 만들 수 있습니다.Java 8 시간 API가 DST 변경 기간의 오프셋을 선택하는 방법

ZoneId를 사용하여 정확한 시간을 나타내는 ZonedDateTime으로 변환 할 수 있습니다.

이렇게하면이 모호성이 실제로 해결되지는 않습니다.이 LocalDateTime과이 영역 (그러나 서로 다른 오프셋)에 해당하는 두 순간이있을 수 있습니다.

API가 서머 오프셋을 선택하는 데 시간과 방법 (이유는 언제든지 환영합니다)을 사용하는 이유는 무엇입니까?

@Test 
public void TimeSetOnDST() throws Exception { 
    LocalDateTime time = LocalDateTime.of(2016, 10, 30, 2, 30); // in the DST time overlap 
    ZonedDateTime of = ZonedDateTime.of(time, ZoneId.of("Europe/Zurich")); 
    System.out.println(of); // 2016-10-30T02:30+02:00[Europe/Zurich] 
    // But why not 2016-10-30T02:30+01:00[Europe/Zurich] ? 
    // Is this just "by convention"? 
} 

답변

3

javadoc에 문서화 :

대부분의 경우, 하나의 유효한 로컬 날짜 - 시간 오프셋이있다. 오버랩의 경우, 클럭이 다시 설정되면 두 개의 유효한 오프셋이 있습니다. 이 메소드는 일반적으로 "summer"에 해당하는 이전 오프셋을 사용합니다.

@JodaStephen의 설명에서 설명한대로 사용 가능한 다른 오프셋을 선택하려면 the withLaterOffsetAtOverlap method을 사용할 수 있습니다.

+0

감사합니다. 나는 관례에 따른 것 같다. – Philipp

+3

규칙을 변경하려면 ['withLaterOffsetAtOverlap()'] (http://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#withLaterOffsetAtOverlap--)을 사용하십시오. (대부분의 유스 케이스의 경우 예외 또는 추가 매개 변수보다 낫기 때문에 대회가 선택되었습니다.) – JodaStephen

+0

나는이 대회를 현명하게 선택했다고 생각합니다. 'LocalDateTime' 의사는 "벽시계"라고 말하고 DST 시프트 후 아침에 일어날 때 우리 모두가 추측하는 컨벤션을 따른다. –

관련 문제