[python] dateutil의 parserinfo 클래스를 사용하여 주어진 요일이 포함되기까지 날짜 설정

소개

Python의 dateutil 모듈은 날짜와 시간을 다루기 위한 유용한 기능을 제공합니다. 이 중에서도 parserinfo 클래스는 특정 지역의 날짜 및 시간 형식을 파싱하는 데 사용됩니다. 이번 포스트에서는 dateutil의 parserinfo 클래스를 사용하여 주어진 요일이 포함되기까지 날짜를 설정하는 방법을 알아보겠습니다.

dateutil.parser.parserinfo 클래스

dateutil.parser.parserinfo 클래스는 dateutil.parser.parse() 메서드와 함께 사용되어 특정 지역의 날짜 및 시간 형식을 파싱할 수 있도록 도와줍니다. 이 클래스를 사용하여 주어진 요일이 포함되기까지 날짜를 설정할 수 있습니다.

from datetime import datetime
from dateutil.parser import parse
from dateutil.parser import parserinfo

class MyParserInfo(parserinfo):
    WEEKDAYS = [("월", "Monday"),
                ("화", "Tuesday"),
                ("수", "Wednesday"),
                ("목", "Thursday"),
                ("금", "Friday"),
                ("토", "Saturday"),
                ("일", "Sunday")]

my_parser_info = MyParserInfo()

def get_next_day_of_week(day_of_week, start_date):
    current_date = start_date
    while True:
        if current_date.weekday() == my_parser_info.WEEKDAYS.index((day_of_week, None)):
            return current_date
        current_date += datetime.timedelta(days=1)

date_string = "2022년 11월 1일 화요일"
start_date = parse(date_string, parserinfo=my_parser_info)
next_friday = get_next_day_of_week("금", start_date)
print(next_friday)  # 출력: 2022-11-04 00:00:00

위의 코드는 “2022년 11월 1일 화요일”이라는 문자열을 parse() 메서드를 사용하여 datetime 객체로 변환합니다. 이때, parserinfo 매개 변수를 사용하여 사용자 정의한 MyParserInfo 클래스를 전달합니다.

MyParserInfo 클래스는 parserinfo 클래스를 상속하며, WEEKDAYS 속성을 재정의하여 한글 요일명과 영문 요일명을 매핑합니다.

get_next_day_of_week() 함수는 주어진 요일이 포함되기까지 다음 날짜를 찾기 위한 로직을 구현합니다. start_date부터 시작하여 current_date를 하루씩 증가시켜가면서 요일을 확인하고, 주어진 요일이 포함된 경우 해당 날짜를 반환합니다.

마지막으로, next_friday 변수에 다음 주 금요일의 날짜를 저장하고 출력합니다.

결론

Python의 dateutil 모듈을 사용하여 주어진 요일이 포함되기까지 날짜를 설정하는 방법에 대해 알아보았습니다. parserinfo 클래스를 상속하여 사용자 정의한 클래스를 작성하고, 요일을 확인하여 해당하는 날짜를 찾을 수 있습니다. 이를 응용하면 특정 요일을 기준으로 주차별 날짜 등을 설정할 수 있습니다.