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

Joda-Time은 Java에서 날짜와 시간을 다루기 위한 강력한 라이브러리입니다. 이 라이브러리를 사용하여 특정 날짜 범위 내에서 특정 요일의 모든 날짜를 구하는 방법을 알아보겠습니다.

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

먼저, 프로젝트에 Joda-Time 라이브러리를 추가해야 합니다. 이를 위해 Maven이나 Gradle과 같은 의존성 관리 도구를 사용할 수 있습니다. 아래는 Maven을 사용하는 예시입니다.

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

2. 특정 날짜 범위와 요일 설정하기

다음으로, 특정 날짜 범위와 찾고자 하는 요일을 설정해야 합니다. 예를 들어, 2021년 1월 1일부터 2021년 12월 31일까지의 모든 토요일을 구하고 싶다고 가정해보겠습니다.

import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;
import org.joda.time.Interval;

public class DateUtils {

    public static List<DateTime> getAllDatesForDayOfWeek(DateTime startDate, DateTime endDate, int dayOfWeek) {
        List<DateTime> dates = new ArrayList<>();

        DateTime currentDate = startDate;
        while (currentDate.isBefore(endDate)) {
            if (currentDate.getDayOfWeek() == dayOfWeek) {
                dates.add(currentDate);
            }
            currentDate = currentDate.plusDays(1);
        }

        return dates;
    }

    public static void main(String[] args) {
        DateTime startDate = new DateTime(2021, 1, 1, 0, 0);
        DateTime endDate = new DateTime(2021, 12, 31, 0, 0);
        List<DateTime> saturdays = getAllDatesForDayOfWeek(startDate, endDate, DateTimeConstants.SATURDAY);

        for (DateTime saturday : saturdays) {
            System.out.println(saturday.toString("yyyy-MM-dd"));
        }
    }
}

3. 결과 확인하기

위 예시 코드를 실행하면, 2021년 1월 1일부터 2021년 12월 31일까지의 모든 토요일 날짜가 출력됩니다.

2021-01-02
2021-01-09
2021-01-16
...
2021-12-18
2021-12-25

위 코드를 참고하여 원하는 날짜 범위와 요일로 변경하여 사용하면 됩니다.

결론

Joda-Time을 사용하여 특정 날짜 범위 내에서 특정 요일의 모든 날짜를 구하는 방법을 알아봤습니다. 이를 활용하여 다양한 날짜 연산을 수행할 수 있습니다. Joda-Time은 오래된 Java API로부터 발전된 더욱 편리한 날짜 및 시간 처리 기능을 제공하므로, 프로젝트에서 날짜와 시간을 다룰 때 유용하게 사용할 수 있습니다.

참고 자료