[java] Joda-Time으로 특정 범위 내에서 특정 요일의 모든 날짜 구하기

자바에서 Joda-Time은 날짜와 시간을 다루기 위한 뛰어난 라이브러리입니다. 이 라이브러리를 사용하면 편리하게 날짜와 시간을 조작하고 계산할 수 있습니다. 이번 글에서는 Joda-Time을 사용하여 특정 범위 내에서 특정 요일의 모든 날짜를 구하는 방법에 대해 알아보겠습니다.

1. Joda-Time 라이브러리 추가

먼저, 프로젝트에 Joda-Time 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, 아래와 같이 의존성을 추가해줍니다.

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.10</version>
</dependency>

2. 특정 범위 내에서 특정 요일의 모든 날짜 구하기

Joda-Time을 이용하여 특정 범위 내에서 특정 요일의 모든 날짜를 구하려면 아래와 같은 단계를 따릅니다.

2.1 시작 날짜와 종료 날짜 설정

먼저, 원하는 특정 범위의 시작 날짜와 종료 날짜를 설정해야 합니다. 이 예제에서는 시작 날짜를 2021년 1월 1일로 설정하고, 종료 날짜를 2021년 12월 31일로 설정하겠습니다.

DateTime startDate = new DateTime(2021, 1, 1, 0, 0);
DateTime endDate = new DateTime(2021, 12, 31, 0, 0);

2.2 특정 요일 설정

다음으로, 원하는 특정 요일을 설정해야 합니다. Joda-Time에서 요일은 1부터 7까지의 정수로 표현됩니다. 1은 일요일을 나타내며, 2부터 순서대로 월요일, 화요일, 수요일, 목요일, 금요일, 토요일을 나타냅니다. 이 예제에서는 월요일을 선택하겠습니다.

int dayOfWeek = DateTimeConstants.MONDAY;

2.3 특정 요일의 모든 날짜 구하기

이제, 주어진 범위 내에서 선택한 요일(월요일)만 포함하는 모든 날짜를 구합니다. Joda-Time에서는 DateTime 클래스의 withDayOfWeek() 메소드를 사용하여 특정 요일로 날짜를 설정할 수 있습니다.

DateTime current = startDate.withDayOfWeek(dayOfWeek);

while (current.isBefore(endDate)) {
    // 선택한 요일(월요일)의 모든 날짜 처리
    // 예제에서는 날짜를 출력합니다.
    System.out.println(current.toString("yyyy-MM-dd"));
    
    // 다음 주의 선택한 요일로 이동
    current = current.plusWeeks(1);
}

위 코드는 시작 날짜부터 종료 날짜까지 반복하면서 선택한 요일(월요일)의 모든 날짜를 출력합니다. withDayOfWeek() 메소드로 현재 날짜를 선택한 요일로 설정한 후, while 루프를 사용하여 날짜를 반복하여 처리합니다. plusWeeks() 메소드를 사용하여 다음 주의 선택한 요일로 이동합니다.

결론

Joda-Time을 사용하여 특정 범위 내에서 특정 요일의 모든 날짜를 구하는 방법을 알아보았습니다. Joda-Time을 사용하면 날짜와 시간을 다루기 쉽고 빠르게 처리할 수 있으므로, 날짜 연산이 자주 필요한 경우에 유용하게 사용할 수 있습니다.

더 많은 정보를 원한다면 Joda-Time 공식 문서를 참조하시기 바랍니다.