-
Instant vs LocalDateTimeJava 2023. 5. 27. 00:01
LocalDateTime, Instant란?
공통적으로 시간을 관리하기 위해 사용하는 자바 클래스입니다.
개인 프로젝트를 진행하면서 Date 더 나아가 Java8의 LocalDate를 사용하곤 합니다.
Instant란?
Instant란 의미는 순간, 즉시를 의미합니다. (인스턴스 음식을 떠올리면 좋습니다)
long 형태로 Unix Tiemstamp를 저장하기 때문에 연산이 빠릅니다. (인간보다는 기계친화적)
Instant.now()로 현재 순간을 기준으로 클래스를 생성할 수 있으며
출력해 보면 다음과 같은 형태로 보이게 됩니다.
2023-04-11T11:35:11.301031Z
나노초까지 표현이 가능하며 뒤에 Z를 표현합니다. (Z는 UTC를 의미합니다.)
자세한 사항에 대해서는 날짜/시간과 관련된 국제 표준인 ISO_8601을 참고하면 좋습니다.
또한 Instant는 항상 UTC(+00:00)을 기준으로 생성됩니다.
Unix Timestamp를 사용하지 않는 이유는?
Unix Timesatmp의 경우에는 2038년 전후로 소프트웨어에 문제가 발생할 수 있는 문제가 있습니다.
32비트 정수형을 통해 만들어져 1970년 1월 1일 자정에서 2147483647초가 지난 2038년 1월 19일 화요일 03시 14분 17 UTC까지가 최대로 나타낼 수 있는 시간입니다.
이후의 시각은 범위를 초과하여 내부적으로 음수로 표현되고 프로그램의 이상 작동을 유발할 수 있습니다.
이를 보완한 것이 Instant 클래스입니다.
LocalDateTime과 Instant의 차이점
위에서만 보았을 때는 Long 타입을 사용하기 때문에 연산이 빠르다 정도를 알 수 있습니다.
하지만 이외에도 글로벌 서비스를 고려한다면 차이점이 하나 더 존재합니다.
글로벌 서비스를 Seoul, LA 등에서 운영하고 있다면 각각 Region마다 서버의 타임존이 다를 수 있습니다.
LocalDateTime은 인스턴스의 Timezone을 기반으로 시간을 생성합니다.
인스턴스의 Timezone을 UTC로 설정해주지 않는다면 각각 Timezone에 맞춰 데이터가 들어갑니다.
하지만 Instant의 경우 항상 UCT를 기준으로 하기 때문에 사용하는 Application에 맞추어 UCT를 활용할 수 있습니다.
참고자료
https://ko.wikipedia.org/wiki/2038년_문제
'Java' 카테고리의 다른 글
구독의 보너스 날짜 계산하기 (0) 2023.09.19 Throwable 클래스란? (0) 2023.06.16 [Java] 날짜,시간과 관련된 LocalDateTime의 역사 (0) 2022.08.27 [Java]ExecutorService란? (0) 2022.07.31 Java Lazy Evaluation이란? (0) 2022.07.24