[java] Joda-Time으로 특정 일자와 요일에 해당하는 모든 날짜 구하기

Joda-Time은 Java에서 날짜와 시간을 처리하는 라이브러리로, 특정 일자와 요일에 해당하는 모든 날짜를 구하는 기능도 제공합니다. 이번 글에서는 Joda-Time을 사용하여 특정 일자와 요일에 해당하는 모든 날짜를 구하는 방법에 대해 알아보겠습니다.

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

Joda-Time을 사용하기 위해 먼저 해당 라이브러리를 프로젝트에 추가해야 합니다. Maven이나 Gradle과 같은 빌드 도구를 사용하는 경우, 아래와 같이 의존성을 추가해주세요.

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

2. 특정 일자와 요일에 해당하는 모든 날짜 구하기

해당하는 모든 날짜를 구하기 위해서는 먼저 LocalDate 객체를 생성해야 합니다. LocalDate 객체는 Joda-Time에서 날짜를 표현하는 클래스입니다.

import org.joda.time.LocalDate;

public class DateUtils {
    
    public static List<LocalDate> getAllDatesForDayOfWeek(LocalDate startDate, int dayOfWeek) {
        List<LocalDate> dates = new ArrayList<>();
        LocalDate date = startDate.dayOfWeek().setCopy(dayOfWeek);
        
        while (date.isBefore(startDate)) {
            date = date.plusWeeks(1);
        }
        
        while (date.isBefore(startDate.plusWeeks(1))) {
            dates.add(date);
            date = date.plusWeeks(1);
        }
        
        return dates;
    }
}

위의 코드에서는 getAllDatesForDayOfWeek 메서드를 사용하여 특정 일자(startDate)와 요일(dayOfWeek)에 해당하는 모든 날짜를 구합니다. LocalDate 객체의 dayOfWeek() 메서드를 사용하여 해당 요일로 설정하고, plusWeeks 메서드를 사용하여 날짜를 변경하고 추가합니다.

3. 사용 예제

이제 위에서 구현한 메서드를 사용하는 예제를 살펴보겠습니다.

import org.joda.time.LocalDate;
import java.util.List;

public class Main {
    
    public static void main(String[] args) {
        LocalDate startDate = new LocalDate(2022, 1, 1);
        int dayOfWeek = DateTimeConstants.MONDAY;
        List<LocalDate> dates = DateUtils.getAllDatesForDayOfWeek(startDate, dayOfWeek);
        
        for (LocalDate date : dates) {
            System.out.println(date);
        }
    }
}

위의 예제에서는 2022년 1월 1일부터 시작하여 월요일에 해당하는 모든 날짜를 구하고 출력합니다.

출력 결과

2022-01-03
2022-01-10
2022-01-17
2022-01-24
2022-01-31

마무리

이번 글에서는 Joda-Time을 사용하여 특정 일자와 요일에 해당하는 모든 날짜를 구하는 방법에 대해 알아보았습니다. Joda-Time은 Java에서 날짜와 시간을 다루는 데 유용한 기능을 제공하므로, 필요한 경우에 활용해보시기 바랍니다. 더 자세한 내용은 Joda-Time 공식 문서를 참고하시기 바랍니다.