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

Joda-Time은 자바에서 날짜와 시간을 처리하기 위한 유용한 라이브러리입니다. 이 라이브러리를 사용하여 특정 날짜 범위 내에서 특정 시간에 해당하는 날짜를 구하는 방법에 대해 알아보겠습니다.

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

먼저, 프로젝트에 Joda-Time 라이브러리를 추가해야 합니다. 프로젝트의 pom.xml 파일에 다음 의존성을 추가해주세요.

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

또는 Gradle을 사용하신다면, 프로젝트의 build.gradle 파일에 다음 의존성을 추가해주세요.

dependencies {
    implementation 'joda-time:joda-time:2.10.10'
}

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

이제 Joda-Time을 사용하여 특정 날짜 범위 내에서 특정 시간에 해당하는 날짜를 구하는 방법을 알아보겠습니다. 아래 예제 코드를 참고해주세요.

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;

public class DateUtils {
    public static LocalDate getDateAtSpecificTime(LocalDate startDate, LocalDate endDate, LocalTime specificTime) {
        LocalDate currentDate = startDate;
        while (currentDate.isBefore(endDate)) {
            DateTime dateTime = currentDate.toDateTime(specificTime);
            if (dateTime.isAfterNow()) {
                return currentDate;
            }
            currentDate = currentDate.plusDays(1);
        }

        return null;
    }

    public static void main(String[] args) {
        LocalDate startDate = new LocalDate(2021, 1, 1);
        LocalDate endDate = new LocalDate(2021, 12, 31);
        LocalTime specificTime = new LocalTime(14, 0); // 2시

        LocalDate result = getDateAtSpecificTime(startDate, endDate, specificTime);
        System.out.println("특정 시간에 해당하는 날짜: " + result);
    }
}

위 코드에서 getDateAtSpecificTime 메소드는 주어진 시작 날짜(startDate), 종료 날짜(endDate), 특정 시간(specificTime)을 기준으로 특정 시간에 해당하는 첫 번째 날짜를 반환합니다. 주어진 범위 내에 특정 시간에 해당하는 날짜가 없을 경우 null을 반환합니다.

위의 예제 코드에서는 2021년 1월 1일부터 2021년 12월 31일까지의 범위 내에 14시(2시)에 해당하는 날짜를 구하는 방법을 보여주고 있습니다.

참고 자료