[python] 파이썬 workalendar를 사용하여 특정 날짜의 이전 휴일과 주말이 포함되는 주말과 주말이 아닌 날짜의 개수 계산하기

특정 날짜의 이전 휴일과 주말이 포함되는(있는 경우) 주말과 주말이 아닌 날짜의 개수를 계산해야 할 때가 있습니다. 이를 해결하기 위해 파이썬의 workalendar 패키지를 사용할 수 있습니다. workalendar는 다양한 국가의 공휴일과 주말 정보를 제공하는 유용한 도구입니다.

이 예시에서는 workalendar 패키지를 사용하여 특정 날짜의 이전 휴일과 주말이 포함되는 주말과 주말이 아닌 날짜의 개수를 계산하는 방법을 알아보겠습니다.

먼저, workalendar 패키지를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다:

pip install workalendar

이제 아래의 예시 코드를 사용하여 필요한 계산을 수행할 수 있습니다:

import datetime
from workalendar.registry import registry

def count_weekend_and_non_weekend_dates(date):
    # 특정 국가의 공휴일 정보를 가져옵니다.
    holidays = registry.get_calendar_class('SouthKorea')()

    # 특정 날짜 이전의 휴일을 구합니다.
    start_date = datetime.datetime(1970, 1, 1)
    end_date = date - datetime.timedelta(days=1)
    pre_holidays = holidays.holidays(start_date, end_date)

    # 특정 날짜를 기준으로 이전의 휴일과 주말을 모두 구합니다.
    all_dates = pre_holidays + [d for d in (start_date + datetime.timedelta(days=i) for i in range((end_date-start_date).days+1)) if d.weekday() in holidays.weekend_days]
    
    # 특정 날짜 이전의 주말과 주말이 아닌 날짜 개수를 계산합니다.
    weekend_count = sum(1 for d in all_dates if d.weekday() in holidays.weekend_days)
    non_weekend_count = len(all_dates) - weekend_count

    return weekend_count, non_weekend_count

# 예시: 2022년 1월 1일의 이전 휴일과 주말이 포함되는 주말과 주말이 아닌 날짜 개수를 계산합니다.
date = datetime.datetime(2022, 1, 1)
weekend_count, non_weekend_count = count_weekend_and_non_weekend_dates(date)
print('주말 포함 날짜 개수:', weekend_count)
print('주말 미포함 날짜 개수:', non_weekend_count)

위의 예시 코드를 실행하면 2022년 1월 1일의 이전 휴일과 주말이 포함되는 주말과 주말이 아닌 날짜 개수를 계산할 수 있습니다. count_weekend_and_non_weekend_dates 함수는 특정 날짜를 입력으로 받아 해당 날짜 이전의 휴일과 주말이 포함되는 주말과 주말이 아닌 날짜의 개수를 반환합니다.

프로그램이 제대로 작동하기 위해서는 workalendar 패키지에 정의된 국가별 공휴일 정보가 필요합니다. 위의 예제에서는 SouthKorea를 사용했지만, 다른 국가에 대한 정보를 가져오려면 registry를 사용하여 해당 국가의 캘린더 클래스를 가져와야 합니다.

주의할 점은 workalendar 패키지가 모든 국가의 공휴일 정보를 가지고 있는 것은 아니기 때문에, 다른 국가의 공휴일 정보를 사용하기 위해서는 해당 국가의 캘린더 클래스가 workalendar에 등록되어 있어야 합니다.