Instant와 LocalDateTime #3
sungyujeon
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Instant와 LocalDateTime이 어떻게 다르고, 어떤 상황에서 사용되어야 하는지 정리하였습니다.
해당 내용은 TIL로 남겼고, 본 discussion에도 공유합니다.
잘못된 정보를 정정하거나 추가하고 싶은 내용은 언제나 환영합니다 : )
LocalDateTime vs Instant
LocalDateTime은 offset과 time-zone 정보를 갖고 있지 않습니다. 반면에 Instant는 EPOCH-seconds(1970-01-01T00:00:00Z)를 기준으로 양수와 음수로 시간 정보를 제공합니다.
LocalDateTime에서 Local은 특정 지역을 나타내지는 않습니다. 단지 해당 서버가 위치한 local의 시간 정보를 나타냅니다.
반면에 Instant는 Java Time-Scale에 따른 UTC-SLS 시간을 제공하고, 아래에서 설명하는 것처럼 epoch-seconds(long)와 nanoseconds(int) 정보를 가지고 있어서 다음과 같이 두 파라미터 값을 전달하여 인스턴스를 생성합니다.
Instant와 LocalDateTime
LocalDateTime 클래스
java docs
Instant 클래스
java docs
time-line에서의 instantaneous point(특정 순간)이다.
애플리케이션에서 특정 이벤트의 time-stamps를 기록하기 위해 보통 사용된다.
Instant의 범위는 long 타입의 숫자보다 크다.
Instant Java API는 자체 시간 척도인 Java Time-Scale 정의
Java Time-Scale
각 일자를 86400개의 초로 나누고, SI초와는 다를 수 있다.
사실상의 international civil time scale을 따르며 그 정의는 변경될 수 있다.
1972년 11월 3일 이후의 순간은 UTC segment를 따르고, UTC-SLS(Coordinated Universal Time-Smoothed Leap Seconds)와 동일하다.
java time-scale은 모든 date-time 클래스들에서 사용
(e.g. Instant, LocalDate, LocalTime, OffsetDateTime, ZonedDateTime, Duration)
value-based class: 인스턴스를 interchangeable(교환 가능)한 것처럼 다뤄야 하고, 동기화를 위해 인스턴스를 사용하지 말아야 한다.(향후 release에서 동기화가 실패할 수 있음)
비교는 equals 메서드를 사용해야 한다.
Time-scale & UTC & Java Time-Scale에 대한 자세한 설명은 원문 참조
Java의 date-time 관련 객체를 추가적으로 알아보았습니다.
Date, Calendar
Date 클래스는 jdk 1.0부터 제공되었으나 여러 문제점을 지님
Calendar 클래스는 jdk1.1부터 제공되었으나 동일하게 여러 문제점을 지님
불변 객체가 아니라 thread-safe 하지 않음
헷갈리는 월(0~11)
표준 UTC 시간대와 다른 기준 적용
package java.time;
LocalDateTime
LocalDate + LocalTime
용례
특정 날짜와 시간을 여러 위치에서 적용하는 경우
(크리스마스는 각 지역의 12월 25일인 경우)
예약을 하는 경우
(특정 지역의 시간으로 예약, zoneId를 함께 제공)
Instant
OffsetDateTime
ZonedDateTime
Continent/Region)결론
각 객체의 표현 방식
정확한 시간 계산이 필요한 경우 Instant 사용(지역과 관계없이 특정 순간을 나타내는 UTC이므로)
특정 지역에서의 local-time이 필요한 경우 Instant + time-zone 정보를 함께 사용
절대적인 시간을 계산하는 것이면 Instant를 사용하는 것이 좋고, 특정 지역의 서버에서 date+time을 표현할 때는 ZonedDateTime 사용
날짜 포맷팅을 위해선 DateTimeFormatter 활용
참고
Beta Was this translation helpful? Give feedback.
All reactions