Java ZoneDateTime 에 대해서Back-end/Java, Kotlin2023. 5. 8. 23:34
Table of Contents
GMT, UTC부터 이해하면 많은 도움이 된다
우선 둘은 거의 동일한 용어이다
(실제로는 둘 사이의 시차가 몇미리초 정도 차이가 난다고 한다)
초기에는 영국에서 그리니치 천문시를 만들고 (GMT) 후에 UTC가 되었다
영국시 기준으로 0시라 가정할 때 우리나라는 상대적으로 +9시간을 더해서 시차를 계산한다
단순히 일시를 나타내는 LocalDateTime과는 달리 ZoneDateTime은 Zone에 따른 시차까지 고려한다
ZoneDateTime은 크게 두가지 정보
ZoneId는 아시아/서울 등의 지역 정보
ZoneOffset은 +9 등의 단순 시각 정보를 갖는다
ZoneOffset은 ZoneId를 상속한다
존이 다르더라도 epoch 시각으로 변환해서 대소관계를 비교할 수 있다 (isEqual()를 사용해야한다)
class ZoneDateTimeTest : StringSpec({
val 한국_타임_존: ZoneId = ZoneId.of("Asia/Seoul")
val 영국_타임_존: ZoneId = ZoneId.of("Europe/London")
"한국시와 영국시가 같은 경우" {
val 한국_일시 = ZonedDateTime.of(LocalDateTime.of(2023, 1, 31, 3, 0), 한국_타임_존)
val 영국_일시 = ZonedDateTime.of(LocalDateTime.of(2023, 1, 30, 18, 0), 영국_타임_존)
한국_일시.isEqual(영국_일시) shouldBe true
한국_일시.equals(영국_일시) shouldBe false // equal은 Zone까지 확인한다
,
"한국시가 영국시보다 느린 경우" {
val 한국_일시 = ZonedDateTime.of(LocalDateTime.of(2023, 1, 31, 3 + 1, 0), 한국_타임_존)
val 영국_일시 = ZonedDateTime.of(LocalDateTime.of(2023, 1, 30, 18, 0), 영국_타임_존)
한국_일시.isAfter(영국_일시) shouldBe true
}
"한국시가 영국시보다 빠른 경우" {
val 한국_일시 = ZonedDateTime.of(LocalDateTime.of(2023, 1, 31, 3 - 1, 0), 한국_타임_존)
val 영국_일시 = ZonedDateTime.of(LocalDateTime.of(2023, 1, 30, 18, 0), 영국_타임_존)
한국_일시.isBefore(영국_일시) shouldBe true
}
})
참고
The World Clock — Worldwide (timeanddate.com)
[Java8 Time API] ZonedDateTime 사용법 | Engineering Blog by Dale Seo
'Back-end > Java, Kotlin' 카테고리의 다른 글
코틀린에서는 일급 컬렉션이 필요할까 (4) | 2023.12.07 |
---|---|
IDEA에서 Kotlin을 사용 중 감동한 건에 대해서... (null 검증) (0) | 2023.05.21 |
Thread에 대한 것들 (0) | 2021.07.14 |
Annotaion 처리부 구현 (값 주입, Trim) (0) | 2021.04.27 |
Reflection : 그누므 리플렉션이 모야 !! (ft. 애노떼이숀, 쩨네릭) (0) | 2021.04.08 |
@philo0407 :: Philo의 다락방
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!