2017-12-27 8 views
-2

문자열에서 파생 된 ZoneOffset의 두 객체가 있습니다. 어떻게 요약하고 ZonedDateTime에 적용 할 수 있습니까? 예를 들어어떻게 두 개의 ZoneOffset을 합산 할 수 있습니까?

:
원래 ZonedDateTime 먼저 오프셋, 2017-12-27T18:30:00입니다 내가 2017-12-28T18:30:00+08:00 또는 2017-12-28T10:30:00의 출력을 얻을 수있는 방법 두 번째 오프셋, +03+05

이다?

+3

그건 논리적으로 이해가되지 않습니까? 영역을 추가하는 것이 올바르지 않은 것 같습니다. 왜 그렇게하고 싶습니까? – luk2302

+0

GMT + 0이 아닌 오프셋을 가진 데이터 배열이 있는데 어떻게 든 처리해야합니다. – San

+3

아직도, 그건 말이 안됩니다. 유일하게 합당한 것은 시간대 사이의 * 날짜를 변환하는 것입니다. 그러나 +03 +05 결과는 +08에 아무런 의미가 없습니다. – luk2302

답변

2

나는이 방법으로 질문을 이해합니다 (올바른지 확인하십시오) : ZonedDateTime과 평소 오프셋이 UTC에서 있습니다. 나는 그것을 dateTimeWithBaseOffset이라고 부를 것이다. 그리고 이전 ZonedDateTime의 오프셋과 관련하여 오프셋이있는 또 다른 ZonedDateTime이 있습니다. 이것은 정말로 잘못된 것입니다. 클래스 디자이너는 오프셋이 UTC에서 나온 것으로 판단했지만 누군가 의도 한 것과 다르게 사용했습니다. 나는 후자 dateTimeWithOffsetFromBase을 부를 것이다.

가장 좋은 오프셋을 가진 dateTimeWithOffsetFromBase을 생성 한 코드를 고칠 수 있다면 가장 좋습니다. 나는 지금 당장이 방법이 당신이 사용할 수있는 해결책이 될 것이라고 가정하고 있습니다. 따라서 잘못된 오프셋을 UTC에서의 오프셋으로 수정해야합니다.

그것은 나쁘지 않아 :

ZoneOffset baseOffset = dateTimeWithBaseOffset.getOffset(); 
    ZoneOffset additionalOffset = dateTimeWithOffsetFromBase.getOffset(); 
    ZoneOffset correctedOffset = ZoneOffset.ofTotalSeconds(baseOffset.getTotalSeconds() 
      + additionalOffset.getTotalSeconds()); 

    OffsetDateTime correctedDateTime = dateTimeWithOffsetFromBase.toOffsetDateTime() 
      .withOffsetSameLocal(correctedOffset); 
    System.out.println(correctedDateTime); 

2017-12-28T18:30+08:00 

를 인쇄 샘플 날짜와 시간을 사용하여 당신이 UTC에서 시간을 원하는 경우 :

correctedDateTime = correctedDateTime.withOffsetSameInstant(ZoneOffset.UTC); 
    System.out.println(correctedDateTime); 

이이 날짜를 인쇄 질문 사항 :

2017-12-28T10:30Z 

날짜가 오프셋 인 경우 ZonedDateTime, OffsetDateTime을 사용할 필요가 없으며 독자에게 더 잘 알려줄 수 있습니다 (ZonedDateTime도 마찬가지 임).

+0

답변 해 주셔서 감사합니다! – San

관련 문제