본문 바로가기

개발 지식/Java

[Java] 일자 계산 LocalDateTime 사용법

반응형

[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 로는 안되는지 한번 코드를 까봐야 할 것 같은데.. 일단은 까먹기 전에 남겨둘라고 이렇게 작성을 해두었고, 이번주 안으로 코드 까보고 원인을 분석해서 다시 블로그에다가 업데이트를 해야겠다!

반응형