[Java] 일자 계산 LocalDateTime 사용법
최근에 4일간 외부 API를 사용하는 API 서버를 개발하는 프로젝트를 혼자서 진행한 적 있다. 이 때문에 혼자 설계하고 Free Tier로 사용할만한 API 찾고 이것저것 하느라고 주말도 반납하고 개발에만 미친듯이 시간을 쏟아 부었다. 설계할 때는 쉬워서 금방 하겠다 하고 추가 기능까지 뭘 할지에 대해 계획을 다 잡아놨었는데 하다 보니까 모르는 에러랑 설계를 따라 가지 못하는 내 코딩 실력 때문에 시간이 부족해서 기본 기능만 했다. 이쪽 분야는 뭔가 백날 똑같은거 해도 모르는게 수두룩 빽빽하게 나오는 것 같아서 좀 빡쳤지만 그래도 팔자려니 할란다. 지나고 보면 재밌었으니깐~
아무튼, 이번에 혼자 개발을 진행하면서 좀 난해했었던 이슈가 한 가지 있었는데, 바로 일자 계산 관련 이슈였다. 즉, User 단에서 입력받은 String 타입의 날짜(2020-09-21 형식)의 xxx일전 날짜를 구해야 하는 문제에서 회사에서 로그 서버를 개발할 때 주로 사용했던 SimpleDateFormat
, Calendar
Date
(java.util) 로는 한계가 있던 이슈였다. xxx일전 날짜를 Calendar
객체를 이용해서 구했는데 네이버 날짜 계산기랑은 다른 날짜가 나오는 것이었는데, 코드로 한번 확인해보자.
위 코드를 토대로 나온 결과인 콘솔에서는 2020-09-21 의 200일 전 날짜는 2020-04-04로 나온다. 하지만 네이버 날짜 계산기로 보았을 때는?
2020.3.5 로 나온다. Calendar 객체를 내가 아직 잘 몰라서 그런것일 수도 있지만 시간이 없어서 일단은 LocalDateTime
객체로 다시 짰더니 제대로 된 결과가 나왔다. 코드는 다음과 같다.
public static String getBeforeDate(String currentDate) throws ParseException {
int day = Integer.parseInt(currentDate.substring(8));
int month = Integer.parseInt(currentDate.substring(5,7));
int year = Integer.parseInt(currentDate.substring(0,4));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime dateCurrent = LocalDateTime.of(year, month, day, 0, 0);
LocalDateTime dateBefore = dateCurrent.minusDays(BEFORE_DAY);
String dateBeforeString = dateBefore.format(formatter);
return dateBeforeString;
}
그리고 그에 해당하는 결과값은 다음과 같다.
왜 Calender
로는 안되는지 한번 코드를 까봐야 할 것 같은데.. 일단은 까먹기 전에 남겨둘라고 이렇게 작성을 해두었고, 이번주 안으로 코드 까보고 원인을 분석해서 다시 블로그에다가 업데이트를 해야겠다!
'개발 지식 > Java' 카테고리의 다른 글
RandomAccessFile 을 통한 일정 사이즈만큼의 바이트 배열 처리 (0) | 2022.02.18 |
---|---|
[Java] Lombok 정리 (0) | 2020.07.02 |
[JAVA] JAR WAR 차이 (0) | 2020.06.27 |
[Java] ParameterizedPreparedStatementSetter setValues해야 하는 컬럼이 많다면? (0) | 2020.06.16 |
[JAVA] Disruptor, Multiple Worker Threads 비교 (0) | 2020.05.09 |