<Java> LocalDate를 활용한 날짜 차이 계산

MinsHouse·2022년 5월 27일
2

웹 페이지 프로젝트를 진행하는 중 가격과 두 날짜 사이의 간격을 더하는 것을 구현을 해야했다.
예를 들면) 물건을 7일간 빌리면 빌린 가격 -> 7 * 물건값

구글링을 열심히 해보았지만 시,분,초를 써서 하는 경우도 있고, SimpleDateFormat을 사용해 구현하는 것들이 대부분이었다.

내가 필요한 것은 2022-03-01 ~ 2022-03-07과 같이 그저 날짜 사이의 간격이었다.

아래의 코드는 내가 구현한 시 분 초 필요없이 날짜만을 사용하여 날짜 사이의 간격을 구하는 식이다.

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 년-월-일로만 Format되게 구현
        LocalDate startDate = LocalDate.parse(contractRequestDTO.getStartDate(), dateTimeFormatter);
        LocalDate endDate = LocalDate.parse(contractRequestDTO.getEndDate(), dateTimeFormatter);
        LocalDateTime date1 = startDate.atStartOfDay();
        LocalDateTime date2 = endDate.atStartOfDay();
        int betweenDays = (int) Duration.between(date1, date2).toDays();

<코드설명>

위의 코드는 날짜 사이의 간격을 구하는 코드이다. 한줄씩 코드 설명하자면

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-> 년,월,일만 필요하기때문에 DateTimeFormatter를 사용하여 Format했다.

LocalDate.parse(contractRequestDTO.getStartDate(), dateTimeFormatter);
LocalDate endDate = LocalDate.parse(contractRequestDTO.getEndDate(), dateTimeFormatter);
-> ContractRequestDTO에서 StartDate와 EndDate를 String으로 선언했기에 LocalDate.parse를 사용했다.

LocalDateTime date1 = startDate.atStartOfDay();
LocalDateTime date2 = endDate.atStartOfDay();
-> LocalDate로 date를 만들면 항상 시,분,초가 필요하다고 오류문이 떠서 그걸 해결할 수 있는 것이 무엇인지 찾아본 결과 atStartOfDay()라는 것이 있었다. atStartOfDay()는 시 분 초를 모두 0으로 맞춰주어 년 월 일로만 계산할 수 있도록 해준다. atStartOfDay를 만들어 date1, date2 생성한다.

int betweenDays = (int) Duration.between(date1, date2).toDays();
-> Duration의 between을 사용하여 날짜 사이의 간격을 계산해준다. toDays()는 날짜 차이의 Day(일)수를 계산해준다.

betweenDays를 활용하여 price * betweenDays 등 다양한 곳에 활용할 수 있다.
LocalDate를 만만하게 봤는데 생각보다 시간이 오래걸렸다.😂

profile
MiniBee

0개의 댓글