요약
- Date 와 LocalDateTime 은 날짜와 시간까지 포함.
- LocalDate 는 날짜까지만 나타냄.
- Date는 Timezone 정보가 UTC로 고정이지만, LocalXXX 는 Timezone과 무관하게 일시 정보만 표현한다.
- Timezone 정보를 포함하는 ZonedDateTime이 있다.
Date 의 단점
(우리 회사 이거 쓰고 있다.)
Java 초기 버전부터 사용된 전통적 타입이다.
시간대는 UTC로 고정이다.(협정 세계시)
하지 "만" 여러 문제 때문에 권장되지 않는다.
- 월이 0부터 시작이다.
- 년도는 1900년부터 시작이다.
먼 소린고 했더니,
new Date(100,0,1)
라고 하면, 2000년 1월 1일이 된다.
가독성도 떨어지고, 내부 메서드들도 직관적이지 않다.
LocalDate 와 LocalDateTime
Timezone 정보를 포함하지 않고, 날짜와 시간 만 표현할 뿐이다.
DB에 보통 Timezone 설정을 해두니까, 중복으로 다루지 않으려면 Date 보단 LocalXXXX 을 쓰는 게 바람직하다.
그리고 더 모던한 클래스이기 때문에, 메서드들이 더 직관적이고 유용하다.
글로벌 서비스에는...?
챗지피티에 물어보니 대부분 글로벌 서비스는 UTC 기준으로 처리한다고 하긴 하는데,
만약 시간대 정보도 포함한 데이터를 저장하고 싶다면 ZonedDateTime 을 쓸 수 있고,
아니면 어차피 DB를 보통 분리할 듯 하니까... 각 DB에 Timezone 설정을 달리 걸어두고,
저장하는 값은 똑같이 LocalXXXX 을 쓰면 되지 않을까... 싶다.
여담
우리 제품은 한국에서만 운영하는 서비스인데... (일본 진출 시도도 있었으나 어차피 무산됐고, 심지어 일본은 시간대가 같다ㅋㅋ)
왜 Date 를 썼을까? (이유는 딱히 없었거나... 초창기에 LocalDateTime이 없었거나, 잘 몰랐던 것 같다...)
심지어 mysql DB에 timezone 도 걸려 있는데...
이 타입과 timezone 문제 때문에 9시간의 시간차가 발생하는 이슈가 있었어서 정리해본다...
'코딩 > Java' 카테고리의 다른 글
Java - Predicate (0) | 2023.08.23 |
---|---|
Java - Arrays.asList(), List.of() (0) | 2023.07.17 |
객체지향 개발 5대 원리 - SOLID 원칙 (0) | 2023.07.07 |
Java - Long과 AtomicLong의 차이, AtomicLong에 대해 (0) | 2023.06.21 |
Java - 동시성 환경에서의 블로킹 vs 논 블로킹 (2/2) (0) | 2023.06.21 |