[java] Joda-Time으로 주말과 공휴일 처리하기

Joda-Time은 Java에서 날짜와 시간을 다루는 강력한 라이브러리입니다. 이 라이브러리를 사용하여 주말과 공휴일을 처리하는 방법을 알아보겠습니다.

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

먼저, 프로젝트에 Joda-Time 라이브러리를 추가해야 합니다. Gradle 빌드 도구를 사용하는 경우 build.gradle 파일에 다음 의존성을 추가합니다:

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

Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다:

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

주말 처리

Joda-Time을 사용하여 특정 날짜가 주말인지 확인하는 것은 매우 간단합니다. 다음 예제 코드를 참고하세요:

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

public class WeekendChecker {
    public static void main(String[] args) {
        DateTime date = new DateTime(); // 현재 날짜 가져오기

        boolean isWeekend = date.getDayOfWeek() == DateTimeConstants.SATURDAY 
                            || date.getDayOfWeek() == DateTimeConstants.SUNDAY;

        if (isWeekend) {
            System.out.println("오늘은 주말입니다!");
        } else {
            System.out.println("오늘은 주말이 아닙니다.");
        }
    }
}

위 코드에서는 DateTime 객체를 사용하여 현재 날짜를 가져옵니다. getDayOfWeek() 메서드를 사용하여 해당 날짜의 요일을 가져온 후, DateTimeConstants.SATURDAY 또는 DateTimeConstants.SUNDAY와 비교하여 주말인지 확인합니다.

공휴일 처리

공휴일은 국가 및 지역에 따라 다르므로, Joda-Time 자체에 기본적인 공휴일 정보가 없습니다. 하지만 Joda-Time을 사용하여 공휴일을 처리할 수 있는 방법은 있습니다.

공휴일 정보를 가져오는 가장 일반적인 방법은 외부 데이터베이스 또는 API를 사용하는 것입니다. 예를 들어, 공휴일 정보를 제공하는 공개 API를 이용하여 서버에서 공휴일 여부를 확인할 수 있습니다.

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.io.IOException;
import java.net.URL;
import java.util.Scanner;

public class HolidayChecker {
    private static final String HOLIDAY_API_URL = "https://api.example.com/holidays/{date}";

    public static void main(String[] args) throws IOException {
        DateTime date = new DateTime(); // 현재 날짜 가져오기
        DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
        String formattedDate = formatter.print(date);

        String holidayApiUrl = HOLIDAY_API_URL.replace("{date}", formattedDate);
        String response = getApiResponse(holidayApiUrl);

        if (response.equals("true")) {
            System.out.println("오늘은 공휴일입니다!");
        } else {
            System.out.println("오늘은 공휴일이 아닙니다.");
        }
    }

    private static String getApiResponse(String url) throws IOException {
        try (Scanner scanner = new Scanner(new URL(url).openStream(), "UTF-8")) {
            return scanner.useDelimiter("\\A").next();
        }
    }
}

위 코드에서는 외부 API를 통해 현재 날짜의 공휴일 여부를 확인합니다. HOLIDAY_API_URL 상수에 실제 API URL을 지정한 후, getApiResponse() 메서드를 사용하여 해당 URL로 요청을 보내고 응답을 가져옵니다. 이후, 응답이 "true"인 경우 공휴일로 처리합니다.

참고 자료

Joda-Time을 사용하여 주말과 공휴일을 처리하는 방법에 대해 알아보았습니다. 이를 통해 더욱 정확하고 유연한 날짜 및 시간 처리를 할 수 있습니다. Happy coding!