출처: https://jodmsoluth.tistory.com/5
OffsetDateTime
- LocalDateTime(날짜 + 시간) + offset(UTC와의 차이) 을 포함한다.
- Instant와 같이 나노초 정밀도로 타임라인에 순간을 저장한다.
- ZoneId의 구현체인 ZoneOffset으로 offset(UTC와의 차이)을 나타낸다.
ZonedDateTime
- OffsetDateTime(날짜 + 시간 + offset) + timezone(지역) 을 포함한다.
- ZoneId의 구현체인 ZoneRegion으로 타임존을 나타낸다.
- DST(Daylight Saving Time)와 같은 써머 타임의 정보(ZoneRules로 판단)가 포함되어 있다.
글로벌 제품 개발시 어떤 타입을 활용하면 좋을까?
서버단에서는 ZonedDateTime
보단 OffsetDateTime
을 활용하는게 더 적합하다.
ZonedDateTime
은 DST가 들어가있다보니 정치적 결정이나 DST 규칙 변경으로 인해 저장된 값의 의미가 달라질수있다.
OffsetDateTime
은 항상 동일한 시점을 나타내기에 일관성 있는 시간관리 방식을 적용시킬수있다. (정치적 결정에 상관없이..)
상세하게는 아래와 같이 처리하는걸 고려해볼 수 있다.
서버 측 처리
- 모든 시간 데이터는 UTC 기준으로 데이터베이스에 저장(OffsetDateTime 활용) => 일관성 있는 데이터 관리와 시간 연산이 용이
클라이언트 측 처리
- 클라이언트는 서버로부터 받은 UTC 시간을 사용자의 로컬 타임존으로 변환하여 표시
API 통신
- 클라이언트와의 모든 통신은 UTC 기준 처리
- 서버는 클라이언트로부터 받은 시간을 UTC로 변환하여 처리