JAVA에서 특정 두 날짜 사이의 날짜를 추출할 수 있습니다.
방법 1
public class Main {
public static void main(String[] args) throws ParseException {
final String DATE_PATTERN = "yyyyMMdd";
String inputStartDate = "20231101";
String inputEndDate = "20231105";
SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN);
Date startDate = sdf.parse(inputStartDate);
Date endDate = sdf.parse(inputEndDate);
ArrayList<String> dates = new ArrayList<String>();
Date currentDate = startDate;
while (currentDate.compareTo(endDate) <= 0) {
dates.add(sdf.format(currentDate));
Calendar c = Calendar.getInstance();
c.setTime(currentDate);
c.add(Calendar.DAY_OF_MONTH, 1);
currentDate = c.getTime();
}
for (String date : dates) {
System.out.println(date);
}
}
}
위 코드는 시작일(2023년 11월 1일)부터 종료일(2023년 11월 5일) 사이의 날짜인
20231102
20231103
20231104
를 추출합니다.
방법 2
JAVA의 Collection을 이용하여 날짜를 추출할 수 있습니다.
cf. JAVA Collection이란?
JAVA8 버전에서는 아래와 같이 시작일과 종료일 사이의 날짜를 추출할 수 있습니다.
public class FromStDtToEdDt {
public static void main(String[] args) {
//날짜 포맷 설정
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
//시작일과 종료일
LocalDate startDate = LocalDate.parse("20231101", formatter);
LocalDate endDate = LocalDate.parse("20231105", formatter);
System.out.println(getFromStDtToEdDt(startDate, endDate));
}
public static List<LocalDate> getFromStDtToEdDt(LocalDate startDate, LocalDate endDate) {
//두 날짜간의 일자 수
int numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate);
//날짜 추출
return IntStream.iterate(0, i -> i + 1)
.limit(numOfDaysBetween)
.mapToObj(i -> startDate.plusDays(i))
.collect(Collectors.toList());
}
}
무한으로 생성되는 IntStream에 두 날짜 간의 일자 수를 나타내는 numOfDaysBetween 값을 넣어 추출할 날짜의 한도를 정해준 뒤 해당 Int 값을 plusDays를 통해 LocalDate로 변환하여 추출합니다.
JAVA9에서는 위 JAVA8 버전보다 더 쉽게 시작일과 종료일 사이의 날짜를 추출할 수 있습니다.
public class FromStDtToEdDt {
public static void main(String[] args) {
//날짜 포맷 설정
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
//시작일과 종료일
LocalDate startDate = LocalDate.parse("20231101", formatter);
LocalDate endDate = LocalDate.parse("20231105", formatter);
System.out.println(getFromStDtToEdDt(startDate, endDate));
}
public static List<LocalDate> getFromStDtToEdDt(LocalDate startDate, LocalDate endDate) {
return startDate.datesUntil(endDate)
.collect(Collectors.toList());
}
}
Java9부터는 datesUntil이라는 LocalDate 클래스의 메소드를 이용해 간단히 시작일부터 종료일까지의 날짜를 추출할 수 있습니다.
반응형
'JAVA' 카테고리의 다른 글
[JPA] JPA의 정의와 Spring Data JPA와의 차이점 (0) | 2024.03.22 |
---|---|
[JAVA] try-with-resources 사용하기(try-catch-finally 와 비교) (2) | 2024.01.18 |
[JAVA] 날짜, 요일, 시간 구하기(Calendar) (2) | 2023.05.23 |
[JAVA] UUID사용하여 고유한 값 만들기 (0) | 2022.12.08 |
[JAVA] split 메소드와 "|"으로 문자 자르기 (2) | 2022.12.06 |
댓글