나는이 방법으로 질문을 이해합니다 (올바른지 확인하십시오) : 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
도 마찬가지 임).
그건 논리적으로 이해가되지 않습니까? 영역을 추가하는 것이 올바르지 않은 것 같습니다. 왜 그렇게하고 싶습니까? – luk2302
GMT + 0이 아닌 오프셋을 가진 데이터 배열이 있는데 어떻게 든 처리해야합니다. – San
아직도, 그건 말이 안됩니다. 유일하게 합당한 것은 시간대 사이의 * 날짜를 변환하는 것입니다. 그러나 +03 +05 결과는 +08에 아무런 의미가 없습니다. – luk2302