ZonedDateTime
주어진 날짜가 DST 격차 또는 중복에 있는지 감지 할 수 있도록하지 않는 것 같습니다. 워드 프로세서는 말할 of
방법 (A를 생성 ZonedDateTime
) :
클럭이 다시 설정 될 때 중첩의 경우에, 두 개의 유효한 오프셋이있다. 이 방법은 이전에 일반적으로 "여름"에 해당하는 오프셋을 사용합니다.
시계는 앞으로 이동할 때 간극의 경우, 오프셋 유효한 없다. 대신, 현지 날짜 - 시간 간격의 길이에 의해 이후로 조정된다.
^ 위 읽으면서,이 방법은 단지 값을 반환하지만 DST 격차 또는 중복이 발생하는 경우 알려 할 수 없습니다.
내가 제공 한 날짜 간격 또는 중복에 있는지 알고 시작 날짜와 격차 또는 중복 종료 날짜를하고 싶습니다.
예를 들면 :
"1920년 9월 1일 0시 10분"시간대 "아프리카 / 아크라"는에 DST 격차 .
갭은 ": 20 : 00 + 00 : 20 1920년 9월 1일 00"에서 "00 : 00 : 00 + 00 1920년 9월 1일 00"에서 .
"1920년 12월 30일 23시 50분"시간 영역 "아프리카 / 아크라"는에 DST 오버랩 .
오버랩 우려 기간 :
"00 : 00 + 00 : 00 1920년 12월 31일 20"에서 "20 1920년 12월 30일 23 : 40 : 00 + 00"및
"1920년 12월 30일 23시 40분 : 00 + 00 : 00 "을"1920년 12월 31일 00 : 00 : 00 + 00 : 00 "
어떻게 위의 예에서와 같이 격차 또는 중복의 경우이 날짜를 얻을 수 있나요?
나는 만들 물리적으로 가능하다고 생각하지 않습니다 ZonedDateTime
갭 전환이 스킵하는 현지 날짜 시간이 기술적으로 "존재"이기 때문에, 갭 변화에 있음을, 그리고 ZonedDateTime
이것에 대해 매우 엄격하다. 당신의 방법에 따라, 하나 예외가 발생합니다 또는 존재하는 시간으로 조정합니다.
당신이 체크해야한다 LocalDateTime
들,하지 ZonedDateTime
이야.
ZoneRules
이라는 매우 편리한 방법이 getTransition
을 소요 LocalDateTime
하고 당신을 제공 ZoneOffsetTransition
격차 / 중복 전환을 나타내거나, null
해당 날짜의 시간이 전이가없는 경우입니다. 예:
System.out.println(ZoneId.of("Africa/Accra").getRules()
.getTransition(LocalDateTime.of(1920, 9, 1, 00, 10)));
산출:
Transition[Gap at 1920-09-01T00:00Z to +00:20]
그런 다음 원하는 정보를 모두에서 (시작, 끝, 격차 / 중복 등 후 오프셋 전에 오프셋) 얻을 수있는 ZoneOffsetTransition
객체입니다.