[python] dateutil의 parserinfo 클래스를 사용하여 주어진 요일과 가장 가까운 날짜 설정

Python의 dateutil 라이브러리는 날짜 및 시간 처리에 유용한 도구를 제공합니다. 그 중 하나인 parser 모듈은 문자열로 된 날짜 및 시간을 파싱하여 datetime 객체로 변환할 수 있습니다. 이 parser 모듈은 parserinfo 클래스를 통해 날짜의 구문을 지정할 수 있어 특정한 요구사항에 맞춰 날짜를 파싱할 수 있습니다.

여기서는 주어진 요일과 가장 가까운 날짜를 설정하는 방법에 대해 알아보겠습니다.

parserinfo 클래스 사용하기

먼저, parserinfo 클래스를 사용하여 특정한 요구사항에 맞는 날짜 구문을 지정합니다. 아래는 원하는 요구사항에 따라 parserinfo 클래스를 사용하여 날짜의 구문을 지정하는 예시입니다.

from dateutil import parser
from dateutil.parser import parserinfo

class CustomParserInfo(parserinfo):
    DAYNAMES = ['월요일', '화요일', '수요일', '목요일', '금요일', '토요일', '일요일']
    def __init__(self):
        super().__init__()
        self.daynabb = ['월', '화', '수', '목', '금', '토', '일']

# CustomParserInfo를 사용하여 날짜 파싱하기
string_date = '화요일'
parsed_date = parser.parse(string_date, parserinfo=CustomParserInfo())

print(parsed_date)  # 출력: 2022-11-01 00:00:00

위의 코드에서는 CustomParserInfo 클래스를 정의하여 날짜의 요일을 한글로 지정하였습니다. DAYNAMES 속성에 원하는 요일의 한글 표현을 리스트로 설정하고, daynabb 속성에는 각 요일의 한글 축약을 리스트로 설정합니다. 이렇게 설정한 CustomParserInfo 클래스를 parser.parse 함수의 parserinfo 매개변수로 전달하면 해당 요일과 가장 가까운 날짜를 반환합니다.

가장 가까운 날짜 설정하기

parser 모듈을 사용하여 날짜를 파싱한 후에는 주어진 요일과 가장 가까운 날짜를 설정할 수 있습니다. 아래는 parsed_date를 기준으로 가장 가까운 날짜를 설정하는 방법에 대한 예시입니다.

import datetime

def get_closest_weekday(parsed_date):
    current_date = parsed_date.date()
    weekdays = [0, 1, 2, 3, 4, 5, 6]  # 0은 월요일, 6은 일요일
    closest_weekday = min(weekdays, key=lambda w: abs(w - current_date.weekday()))

    if closest_weekday < current_date.weekday():
        closest_weekday += 7

    closest_date = current_date + datetime.timedelta(days=closest_weekday - current_date.weekday())
    return closest_date

closest_date = get_closest_weekday(parsed_date)
print(closest_date)  # 출력: 2022-11-08

위의 코드에서는 get_closest_weekday 함수를 사용하여 가장 가까운 날짜를 설정합니다. 이 함수는 주어진 날짜의 date 속성을 사용하여 현재 요일을 가져온 후에, 주어진 요일과 가장 가까운 요일을 계산합니다. 그런 다음, datetime.timedelta를 사용하여 계산한 값을 기준으로 가장 가까운 날짜를 설정합니다.

위의 코드를 실행하면 2022-11-01에 가장 가까운 화요일인 2022-11-08이 출력됩니다.

마무리

이와 같이 dateutilparserinfo 클래스를 사용하여 주어진 요일과 가장 가까운 날짜를 설정할 수 있습니다. 이를 활용하면 날짜 처리와 관련된 다양한 요구사항에 맞는 코드를 작성할 수 있습니다. 자세한 내용은 dateutil 공식 문서를 참고하시기 바랍니다.