OffsetDateTime과 ZonedDateTime의 차이

·2023년 6월 11일

들어가기 전에

OffsetDateTime와 ZonedDateTime 객체는 일반적인 시간/날짜 값에 지역 시간대를 추가한 값을 다룹니다.

🤔지역 시간대??

간단하게 말해서 지역별 시차라 생각하면 됩니다.
우리나라는 UTC 기준 +09:00입니다.

UTC는 세계협정시로, 영국 런던의 그리니치 천문대가 기준이 되어
0시 0분입니다. 지구의 360도를 24시간으로 나누면 15˚마다 1시간이죠?
그래서 지역별로 경도 15˚마다 1시간씩 차이가 납니다.

❓ OffsetDateTime과 ZonedDateTime은 어떤 차이가 있을 까요?

둘 다 UTC 기준의 지역 시간을 다루는 건 동일하지만 큰 차이가 있습니다.
offsetDateTime은 지역을 선택할 수 없고, ZonedDateTime은 지역을 선택할 수 있다는 것입니다.

ZonedDateTime은 지역을 선택할 수 있다. 이게 이름에 zone이라 붙은 이유라 생각합니다.
밑의 예시를 보시면 OffsetDateTime에는 별다른 값이 들어가지 않습니다. 제가 살고 있는 지역의 시간대를 보여주기 때문이죠.

반면에 ZonedDateTime에는 ZoneId 값이 들어갑니다. 지역값을 넣으면 그 지역의 시간대를 알 수 있습니다.

import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class Main {
    public static void main(String[] args) {
        // 현재 시간을 얻기 위해 OffsetDateTime 객체 생성
        OffsetDateTime currentDateTime = OffsetDateTime.now();

        // 뉴욕의 시간을 얻기 위해 ZonedDateTime 객체 생성
        ZonedDateTime newYorkDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));

        System.out.println("Current Time: " + currentDateTime);
        System.out.println("New York Time: " + newYorkDateTime);
    }
}
// 출력 값
// 서울의 UTC 지역 시간대가 담겼다.
Current Time: 2023-06-11T10:00:00+09:00 
// 뉴욕의 UTC 지역 시간대와 지역명이 함께 출력된다. 
New York Time: 2023-06-10T21:00:00-04:00[America/New_York]

마치며

이상으로 OffsetDateTime과 ZonedDateTime의 차이를 마칩니다.
공부하며 알게 된 내용을 정리했으므로 지적은 언제나 환영합니다~

profile
개발자가 되기 위해 페달을 밟아가는 과정

0개의 댓글