Java

Instant vs LocalDateTime

Junuuu 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://sujl95.tistory.com/85

 

Java 8 LocalDateTime vs Instant 어떤 상황에서 쓰는게 적합한가?

Java 8 LocalDateTime vs Instant 어떤 상황에서 쓰는게 적합한가? 들어가기 전에 본 글은 세션 공유용 자료이며 LocalDateTime, Instant 의 개념에 관한 짧은 글이 아니므로 양해 부탁드립니다. 포스팅 계기 최

sujl95.tistory.com

https://ko.wikipedia.org/wiki/2038년_문제

 

2038년 문제 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 2038년 1월 19일 03:14:07이 넘어가면 1901년 12월 13일 20:45:52초로 돌아간다. 2038년 문제(2038年 問題, 영어: year 2038 problem, Unix Millennium bug, Y2K38)란 컴퓨터 분야에서 2038

ko.wikipedia.org