[java] Joda-Time으로 특정 날짜 범위 내에서 특정 시간에 해당하는 모든 날짜 구하기

특정 날짜 범위에서 특정 시간에 해당하는 모든 날짜를 구하기 위해 Joda-Time 라이브러리를 사용할 수 있습니다. Joda-Time은 자바에서 날짜와 시간을 다루는 강력한 도구로 알려져 있습니다.

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

먼저, Joda-Time 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, 프로젝트의 pom.xml 파일에 다음 의존성을 추가합니다:

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

Gradle을 사용하는 경우, 프로젝트의 build.gradle 파일에 다음 의존성을 추가합니다:

implementation 'joda-time:joda-time:2.10.10'

2. 특정 날짜 범위에서 특정 시간에 해당하는 모든 날짜 구하기

다음은 Joda-Time을 사용하여 특정 날짜 범위에서 특정 시간에 해당하는 모든 날짜를 구하는 예제 코드입니다. 예를 들어, 2021년 1월 1일부터 2021년 12월 31일까지의 범위에서 오전 9시에 해당하는 모든 날짜를 구하고자 한다면 다음과 같이 할 수 있습니다:

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.joda.time.Interval;
import org.joda.time.format.DateTimeFormat;

public class DateRangeExample {
    public static void main(String[] args) {
        // 특정 날짜 범위 생성
        LocalDate startDate = new LocalDate(2021, 1, 1);
        LocalDate endDate = new LocalDate(2021, 12, 31);
        Interval interval = new Interval(startDate.toDateTime(LocalTime.MIDNIGHT),
                                        endDate.toDateTime(LocalTime.MIDNIGHT));

        // 특정 시간 생성
        LocalTime targetTime = LocalTime.parse("09:00",
                                               DateTimeFormat.forPattern("HH:mm"));

        // 특정 시간에 해당하는 모든 날짜 출력
        DateTime currentDate = interval.getStart().toDateTime();
        while (currentDate.isBefore(interval.getEnd().toDateTime())) {
            if (currentDate.toLocalTime().equals(targetTime)) {
                System.out.println(currentDate.toLocalDate());
            }
            currentDate = currentDate.plusDays(1);
        }
    }
}

위 코드에서는 LocalDate를 사용하여 특정 날짜 범위를 생성하고, Interval을 사용하여 시작 날짜와 종료 날짜를 포함한 범위를 설정합니다. 또한, LocalTime을 사용하여 특정 시간을 생성합니다. DateTimetoLocalTime() 메서드를 사용하여 현재 날짜와 시간을 비교하여 원하는 시간과 일치하는지 확인합니다. 만약 일치한다면, 해당 날짜를 출력합니다.

이제 위 코드를 실행하면 특정 날짜 범위에서 특정 시간에 해당하는 모든 날짜가 출력될 것입니다.

참고 자료