본문 바로가기
JAVA

[JAVA] 두 날짜 사이 값 구하기

by 무사뎀벨레 2023. 11. 27.

 

 

 

 

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이란?

 

[JAVA] Collection Framework(List, Queue, Set)과 MAP

Java의 자료구조는 Collection Framework과 Map으로 나눌 수 있습니다. Collection Framework은 다수의 데이터를 쉽고 효과적으로 처리할 수 있도록 도와줄 수 있는 클래스의 집합이고, Map은 Key와 Value로 이루

hajoung56.tistory.com

 

 

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 클래스의 메소드를 이용해 간단히 시작일부터 종료일까지의 날짜를 추출할 수 있습니다.

반응형

댓글