Java에는 시간을 나타내는 객체가 여러가지가 있다.
LocalDate, LocalDateTime, TimeStamp 등이 있는데 프로젝트를 하면서 어떻게 사용할지 고민이 되어 알아보았다.
LoalDate와 LocalDateTimedms Java 8 버전부터 나온 데이터 타입이다.
기존에 사용된 java.util.Date, java.sql.Date 타입은 클래스 명이 동일하고 변경이 가능한 클래스로 스레드로부터 안전하지 않았다.
또한 java.util.Date 클래스는 특정 시점을 날짜가 아닌 밀리초 단위로 표현되는 등 표현하는 방식이 직관적이지 않으며 자체적으로 시간대를 불러오지 못하는 클래스였다.
이러한 문제점들을 보완하여 등장한 것이 LocalDate와 LocalTime, LocalDateTime 클래스이다.
LocalDate | LocalDateTime |
---|---|
yyyy-MM-dd 형식이다. | yyyy-MM-dd-HH-mm-ss.zzz 형식이다. |
변경할 수 없는 클래스로 스레드로부터 안전하다. | 변경할 수 없는 클래스로 스레드로부터 안전하다. |
TimeStamp는 LocalDateTime 타입과 동일하게 년월일, 시분초 UTC 형식이며 본래는 Long 타입을 toString() 메서드를 사용하여 DateTimeFormatter로 형식을 변환하여 보여주는 방식이다.
Long 타입이기 때문에 연산이 빠르다.
⇒ LocalDate와 LocalDateTime중에는 시간, 초까지 다루기 때문에 LocalDateTime을 선택하였고 UTC 형식으로 시간을 저장해야하는 경우나 연산이 필요한 작업에서는 TimeStamp를 사용되지만 Daily 프로젝트는 글로벌 서비스가 아니고 연산 작업이 아닌 소모임 날짜 등 특정 지정 날짜를 표시하는데 사용되기 때문에 LocalDateTime이 적합하다고 판단하였다.