OffsetDateTime와 ZonedDateTime 객체는 일반적인 시간/날짜 값에 지역 시간대를 추가한 값을 다룹니다.
간단하게 말해서 지역별 시차라 생각하면 됩니다.
우리나라는 UTC 기준 +09:00입니다.
UTC는 세계협정시로, 영국 런던의 그리니치 천문대가 기준이 되어
0시 0분입니다. 지구의 360도를 24시간으로 나누면 15˚마다 1시간이죠?
그래서 지역별로 경도 15˚마다 1시간씩 차이가 납니다.
둘 다 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의 차이를 마칩니다.
공부하며 알게 된 내용을 정리했으므로 지적은 언제나 환영합니다~