Programing

ZoneOffset의 차이점은 무엇인가?UTC 및 ZoneId.of("UTC")?

c10106 2022. 5. 6. 19:25
반응형

ZoneOffset의 차이점은 무엇인가?UTC 및 ZoneId.of("UTC")?

왜 그럴까?

ZonedDateTime now = ZonedDateTime.now();
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC)
        .equals(now.withZoneSameInstant(ZoneId.of("UTC"))));

인쇄하다.false?

둘 다 예상할 수 있다.ZonedDateTime대등한 예

답은 ...의 자바도크에서 나온다.

ZoneId는 Instant와 LocalDateTime 간 변환에 사용되는 규칙을 식별하는 데 사용된다.ID에는 다음과 같은 두 가지 유형이 있다.

  • 고정 오프셋 - UTC/Greenwich에서 완전히 분해된 오프셋으로, 모든 현지 날짜에 동일한 오프셋을 사용함
  • 지역 - UTC/Greenwich에서 오프셋을 찾기 위한 특정 규칙 집합이 적용되는 지역

대부분의 고정 오프셋은 ZoneOffset으로 표현된다.ZoneId에서 정규화된()를 호출하면 고정 오프셋 ID가 ZoneOffset으로 표시되도록 할 것이다.

... 그리고 (내) 자바도크에서:

이 방법은 ZoneId 또는 ZoneOffset을 생성하는 ID를 구문 분석한다.ZoneOffset은 ID가 'Z'이거나 '+' 또는 '-'로 시작하면 반환된다.

인수 ID가 다음과 같이 지정됨"UTC"그러므로 그것은 a를 반환할 것이다.ZoneId문자열 형식으로 표시되는 오프셋 포함:

System.out.println(now.withZoneSameInstant(ZoneOffset.UTC));
System.out.println(now.withZoneSameInstant(ZoneId.of("UTC")));

출력:

2017-03-10T08:06:28.045Z
2017-03-10T08:06:28.045Z[UTC]

사용하면서equals비교 방법, 개체 동등성을 확인하십시오.기술된 차이 때문에 평가 결과는 다음과 같다.false.

설명서에 제시된 대로 방법을 사용할 경우 다음을 사용하여 비교하십시오.equals돌아올 것이다true로서normalized()그에 상응하는 것을 돌려줄 것이다.ZoneOffset:

시간대 ID를 정규화하고 가능한 경우 ZoneOffset을 반환하십시오.

now.withZoneSameInstant(ZoneOffset.UTC)
    .equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())); // true

설명서에 나와 있는 바와 같이 다음을 사용하는 경우"Z"또는"+0"입력 ID로,of다시 돌아올 것이다.ZoneOffset직접 전화할 필요가 없다.normalized():

now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("Z"))); //true
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("+0"))); //true

같은 날짜 시간을 저장하는지 확인하려면 대신 다음 방법을 사용하십시오.

now.withZoneSameInstant(ZoneOffset.UTC)
    .isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))); // true

샘플

System.out.println("equals - ZoneId.of(\"UTC\"): " + nowZoneOffset
        .equals(now.withZoneSameInstant(ZoneId.of("UTC"))));
System.out.println("equals - ZoneId.of(\"UTC\").normalized(): " + nowZoneOffset
        .equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())));
System.out.println("equals - ZoneId.of(\"Z\"): " + nowZoneOffset
        .equals(now.withZoneSameInstant(ZoneId.of("Z"))));
System.out.println("equals - ZoneId.of(\"+0\"): " + nowZoneOffset
        .equals(now.withZoneSameInstant(ZoneId.of("+0"))));
System.out.println("isEqual - ZoneId.of(\"UTC\"): "+ nowZoneOffset
        .isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))));

출력:

equals - ZoneId.of("UTC"): false
equals - ZoneId.of("UTC").normalized(): true
equals - ZoneId.of("Z"): true
equals - ZoneId.of("+0"): true
isEqual - ZoneId.of("UTC"): true

참조URL: https://stackoverflow.com/questions/39506891/what-is-the-difference-between-zoneoffset-utc-and-zoneid-ofutc

반응형