ZonedDateTime과 OffsetDateTime의 차이점은 무엇입니까?
매뉴얼을 읽었는데도 어느쪽을 사용해야 하는지 알 수 없습니다.
문서 문서에에 따르면 따라OffsetDateTime
때 이에 날짜를 쓰고, 하지만 왜 받지 않아 사용되어야 합니다.데이터베이스에 날짜를 쓸 때 사용해야 하는데 왜 그런지 모르겠어요.
Q: Java 8 ZonedDateTime과 OffsetDateTime의 차이점은 무엇입니까?
javadocs는 다음과 같이 말합니다.
""
OffsetDateTime
,,ZonedDateTime
그리고 그리고.Instant
모든 나노초 정밀에 시각표.에 즉시 저장한다.모두 타임라인에 나노초 단위로 한 순간을 저장합니다.Instant
는 것은, 인스턴트를 나타내는 단순한 있다.가장 단순하고,단순히 순간을 표현합니다.OffsetDateTime
이 즉석에 추가합니다 UTC/Greenwich한 국내 date-time 할 수 있다는 점에서 오프셋입니다.는 UTC/Greenwich로부터의 오프셋을 추가합니다.이것에 의해, 로컬의 날짜 시각을 취득할 수 있습니다.ZonedDateTime
전체 표준 시간대 규칙을 추가합니다."풀타임존 규칙을 추가합니다.
출처 : https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html
따라서 따라서 사이의 차이점가지 차이입니다 두 이.OffsetDateTime
★★★★★★★★★★★★★★★★★」ZonedDateTime
후자는 여름 시간 조정 및 기타 다양한 이상 현상을 다루는 규칙을 포함하고 있습니다.
간단히 말하면:
시간대 = (Offset-From-UTC + Rules-For-Anomalies )
에 따르면 Q: 뉴뉴 q 。
OffsetDateTime
데이터베이스에 날짜를 쓸 때 사용해야 하는데 왜 그런지 모르겠어요.
로컬 시간 간격띄우기가 있는 날짜는 항상 동일한 시간 인스턴스를 나타내므로 순서가 안정적입니다.반면, 완전한 시간대 정보를 가진 날짜의 의미는 각 시간대 규칙에 대한 조정에 직면하여 불안정하다(그리고 이러한 일이 일어난다. 「」를 참조해 주세요., 「」를 하면,ZonedDateTime
구현에 문제가 있습니다.
계산된 오프셋을 저장할 수 있습니다.그러면 취득된 오브젝트는 존 ID의 현재 규칙과 일치하지 않는 오프셋을 가질 수 있습니다.
계산된 오프셋 ...을 폐기할 수 있습니다.그러면 검색된 개체는 절대/범용 타임라인에서 저장된 포인트와 다른 포인트를 나타냅니다.
Java 오브젝트의 시리얼화를 사용하는 경우 Java 9 구현은 첫 번째 접근방식을 취합니다.이것이 이 문제를 해결하는 "더 올바른" 방법이라고 할 수 있지만, 문서화된 것은 아닌 것 같습니다.(JDBC 드라이버와 ORM 바인딩도 아마 비슷한 결정을 내리고 있으며 올바르게 처리되기를 바랍니다.)
, 날짜을 수동으로 에하는 java.sql.DateTime
zone-id의 복잡성에 대처하는 것은 아마 피해야 할 것입니다.그래서 충고입니다.
시간 경과에 따라 의미/순서가 불안정한 날짜는 응용 프로그램에 문제가 될 수 있습니다.또한 존 규칙의 변경은 엣지 케이스이기 때문에 예기치 않은 타이밍에 문제가 발생하기 쉽습니다.
이 조언의 두 번째 이유(가능성이 있는)는 다음과 같은 구성입니다.ZonedDateTime
모호한 점이 있습니다.예를 들어, "클럭을 되돌리는" 기간에 로컬 시간과 존 ID를 조합하면 두 가지 다른 오프셋을 얻을 수 있습니다.그ZonedDateTime
항상 둘 중 하나를 선택하겠지만 항상 옳은 선택은 아닙니다
이 문제는 다음 구성 요소를 구성하는 모든 애플리케이션에 문제가 될 수 있습니다.ZonedDateTime
그런 식으로 가치관을요.그러나 엔터프라이즈 애플리케이션을 구축하는 사람의 관점에서는 (잘못될 수 있음)이 더 큰 문제가 됩니다.ZonedDateTime
값은 고정되며 나중에 사용됩니다.
수용된 답변은 매우 상세한 설명을 제공하며, 아마도 아래 코드 예시는 짧고 명확한 그림을 제공할 수 있습니다.
Instant instant = Instant.now();
Clock clock = Clock.fixed(instant, ZoneId.of("America/New_York"));
OffsetDateTime offsetDateTime = OffsetDateTime.now(clock);
ZonedDateTime zonedDateTime = ZonedDateTime.now(clock);
System.out.println(offsetDateTime); // 2019-01-03T19:10:16.806-05:00
System.out.println(zonedDateTime); // 2019-01-03T19:10:16.806-05:00[America/New_York]
System.out.println();
OffsetDateTime offsetPlusSixMonths = offsetDateTime.plusMonths(6);
ZonedDateTime zonedDateTimePlusSixMonths = zonedDateTime.plusMonths(6);
System.out.println(offsetPlusSixMonths); // 2019-07-03T19:10:16.806-05:00
System.out.println(zonedDateTimePlusSixMonths); // 2019-07-03T19:10:16.806-04:00[America/New_York]
System.out.println(zonedDateTimePlusSixMonths.toEpochSecond() - offsetPlusSixMonths.toEpochSecond()); // -3600
System.out.println();
System.out.println(zonedDateTimePlusSixMonths.toLocalDateTime()); // 2019-07-03T19:10:16.806
System.out.println(offsetPlusSixMonths.toLocalDateTime()); // 2019-07-03T19:10:16.806
요컨대, 사용ZonedDateTime
일광 절약 시간을 고려하는 경우에만 일반적으로 위의 예에서 볼 수 있듯이 1시간 차이가 있습니다. 오프셋은ZonedDateTime
에서 바꾸다.-5:00
로.-04:00
대부분의 경우 비즈니스 로직이 버그로 끝날 수 있습니다.
(https://www.youtube.com/watch?v=nEQhx9hGutQ)에서 코드 복사).
언급URL : https://stackoverflow.com/questions/30234594/whats-the-difference-between-zoneddatetime-and-offsetdatetime
'programing' 카테고리의 다른 글
Nuxt.js의 Vuex 유틸리티 함수에서 $axios를 사용하는 방법 (0) | 2022.07.23 |
---|---|
여러 보기 유형을 사용하여 RecycleerView를 생성하는 방법 (0) | 2022.07.19 |
Java - 현재 클래스 이름을 가져옵니다. (0) | 2022.07.19 |
Vue nexttick을 사용하기 위해 지연된 jquery를 변경하는 방법 (0) | 2022.07.19 |
vue findIndex가 함수가 아닙니다. (0) | 2022.07.19 |