어떻게 DST 격차와 중복을 얻으려면?

user2923322 :

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객체입니다.

추천

출처http://10.200.1.11:23101/article/api/json?id=478579&siteId=1