-
자바에서 시간대를 얻기 위해 사용하는 class들이 여러 개 있습니다.
이번 글에서는 자바 8에 추가된 instant와 localDateTime을 알아보겠습니다.
UTC : 세계 협정시. 1970.01.01 이후부터 시행된 표준시
https://ko.wikipedia.org/wiki/%ED%98%91%EC%A0%95_%EC%84%B8%EA%B3%84%EC%8B%9C협정 세계시 - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
Instant는 UTC이후 경과된 나노초를 나타냅니다.
LocalDateTime은 표준시간대 없이 시각을 나타냅니다.now를 찍어보면 그 차이를 알 수 있습니다.
한국은 UTC +9:00 이기에 localDatetime에는 instant보다 9시간 더해진 것을 알 수 있습니다.
둘의 성격이 다르듯 제공되는 메소드도 다릅니다.instant의 경우 UTC를 기준으로 얼마나 지났는지에 대한 메서드가 많은 반면
localDateTime은 특정 날짜, 시간을 나타낼 수 있습니다.now() 내부 구현은 어떻게 되어 있을까요?
instant는 내부에서 해당 파이널 필드를 사용해 객체를 생성합니다.
LocalDateTime는 해당 시스템의 default time zone을 사용합니다.무엇을 사용해야할까요?
instant : 특정 행위가 일어난 시각을 나타낼 수 있습니다. 날짜와 시간의 정보를 조작하기보다는 특정 시점의 타임스탬프로 활용합니다.
localDateTime : 특정 날짜, 시각을 나타낼 수 있습니다.단점은 무엇이 있을까요?
저는 instant를 사용하다 보니 몇 가지 불편한 점이 있었습니다.
예로 string 타입 변환이 귀찮습니다.
string -> localDate -> Intant 형식으로 변경해줘야 합니다.val parse = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyyMMdd")) val atZone = parse.atStartOfDay().atZone(ZoneId.of("UTC"))
해당 문제는 json 변환으로 이어집니다.
외부에서 yyyyMMdd와 같은 형태로 들어온다면
@JsonFormat(pattern = "yyyyMMdd")를 사용할 수 없고 직접 역직렬화를 해주는 class를 생성해야 합니다.
시간대가 필요하지만 없기 때문입니다.고려할 점
data base에 insert 시 시간대를 고려하십시오.
ex) jvm은 kst, db는 utc일 경우. application에서 insert될 때 jdbc 드라이버는 시간대를 맞추기 위해 +9:00 시간을 뺍니다'글또' 카테고리의 다른 글
log4j2 (0) 2022.08.07 토스 slash 22 를 보고 (0) 2022.07.25 디자인 패턴 적용기 (0) 2022.06.26 글또 다짐글 (2) 2022.05.04 제목은 젠킨스 서버 분리로 하겠습니다. 근데 이제 도커를 곁들인 (0) 2022.03.13