반응형
1. ChronoUnit 을 이용하여 날짜 간격을 구한다
ChronoUnit.DAYS.between(from,to);
- ChronoUnit은 TemporalUnit 인터페이스를 구현한 Enum 클래스
DAYS, HOURS, NANOS, MICROS 등등 다양한 시간 단위가 있고,
외부에서 사용할 수 있는 between, getDuration, isDurationEstimated 등 다양한 API를 제공한다
[참고]
https://docs.oracle.com/javase/10/docs/api/java/time/temporal/ChronoUnit.html
2. 31일씩 나누어 계산한 시작일 종료일을 List에 담아준다
LocalDate는 불변객체로 plusDays 등의 메소드를 호출했을 때,
해당 객체가 변하는 것이 아니라 새로운 객체를 생성해서 반환해주는 것을 유의
ex. return new LocalDate(year, month, dom);
[샘플 코드]
private List<String[]> splitDays(String fromDate, String toDate) {
List<String[]> searchDates = new ArrayList<>();
LocalDate from = LocalDate.of(2021,01,01);
LocalDate to = LocalDate.of(2021,05,21);
LocalDate date = from; // 계산 시 종료일로 사용할 LocalDate 변수
// 1. ChronoUnit을 이용하여 날짜 간격을 구한다
long days = ChronoUnit.DAYS.between(from,to);
// 2. 31일 간격으로 나눠준다
long interval = 31;
long intervalNumber = days/interval;
long remainDays = days%interval;
for(int i=0; i<=intervalNumber;i++) {
String[] searchDate = new String[2];
if(i < intervalNumber ) {
// 3. 31일 을 더해준다
date = date.plusDays(interval);
}else {
// 4. 마지막 회차에는 31일로 나눈 나머지 날짜를 더해준다
date = date.plusDays(remainDays);
}
// [참고] LocalDate는 불변객체이므로, plusDays를 한 후 date 변수에 다시 할당한다
searchDate[0] = from; // 시작일
searchDate[1] = date; // 종료일
searchDates.add(searchDate);
// 5. 시작일에 하루를 더해 다음 간격을 구하도록 한다
from = date.plusDays(1);
}
return searchDates;
}
반응형
'개발 > Java' 카테고리의 다른 글
[Lombok] @Builder / @Builder.Default / @Singular (0) | 2022.01.21 |
---|---|
[Lombok] @Data / @ToString / @EqualsAndHashCode / @Getter / @Setter / @RequiredArgsConstructor (0) | 2022.01.20 |
[Java] 체크예외, 언체크예외 초간단 정리 (0) | 2022.01.11 |
[Java] equals 메서드 (0) | 2021.06.15 |
[이펙티브 자바] 정적 팩터리 메서드 명명 방식 (0) | 2021.04.27 |
댓글