공유 블로그

이전 글을 활용해서 https://all-share-source-code.tistory.com/87 날짜 비교 함수 까지 만들어 보았습니다.

 

python날짜 변환 통합 함수

문자열 날짜 datetime 변환 가능한 함수 이며, 추가로 변환 기능까지 넣어 보았습니다. from datetime import datetime # 날짜 변환 함수(문자열 특정 포맷 날짜로 변환) def trans_date(date: (datetime | str), toFormat:

all-share-source-code.tistory.com

 

from datetime import datetime


# 날짜 변환 함수(문자열 특정 포맷 날짜로 변환)
def trans_date(date: (datetime | str), toFormat: str = "%Y-%m-%d", transFormat: (str | bool) = "%Y-%m-%d", exception: list = []) -> (datetime | str | dict):
    r'''
    date : 날짜입력 (datetime, 문자열 형태로 입력)

    toFormat : 
        str타입 -> 문자열의 날짜형식에 맞게 입력
        datetime타입 -> 원하는 문자열날짜 형태로 출력할 형식으로 입력

    transFormat : 변환할 날짜 형식

    exception : 예외처리할 값들

    @return값 :
        date : 입력값
        returnDATE : 
            'toFormat' -> date값 변환 되서 나옴
            'transFormat' -> transFormat매개변수로 변환된 값 ('str', 'datetime')
    '''
    if date in exception:
        return ''

    returnDATE: dict[str, (str | dict[str, (str, datetime)])] = {
        'toFormat': None,
        'transFormat': {'str': None, 'datetime': None},
    }

    # 문자열일 경우
    if isinstance(date, str):
        returnDATE['toFormat'] = datetime.strptime(date, toFormat)

        if transFormat:
            returnDATE['transFormat']['str'] = returnDATE['toFormat'].strftime(transFormat)
            returnDATE['transFormat']['datetime'] = datetime.strptime(returnDATE['transFormat']['str'], transFormat)

    # 날짜 형식 일경우
    elif isinstance(date, datetime):
        returnDATE['toFormat'] = date.strftime(toFormat)

        if transFormat:
            returnDATE['transFormat']['str'] = date.strftime(transFormat)
            returnDATE['transFormat']['datetime'] = datetime.strptime(returnDATE['transFormat']['str'], transFormat)

    # if not pd.notna(date):
    #     return 'N/A'

    if not transFormat:
        del returnDATE['transFormat']

    return returnDATE


# 날짜 비교 함수
def date_compare(leftDate=None, targetDate: (datetime | list) = [], rightDate=None, compare='<=', formatString="%H:%M"):
    r'''
    leftDate : 비교할 왼쪽 날짜

    targetDate : 비교할 날짜
        datetime형식 일경우 -> datetime.datetime(2021, 8, 31, 15, 0)
        문자열형식 일경우 -> ['날짜 문자열','날짜 형식']    예) ['2021-08-31 15:00:00', '%Y-%m-%d %H:%M:%S']

    rightDate : 비교할 오른쪽 날짜

    compare : 비교 연산자

    formatString : 비교 날짜 형식
    '''

    import datetime

    if not targetDate:
        print('타겟 날짜가 없습니다.')
        return False
    elif isinstance(targetDate, str):
        print('리스트 형태로 문자열 날짜와 날짜형식을 입력해주세요.')
        return False

    if isinstance(targetDate, list):
        targetDate = trans_date(targetDate[0], targetDate[1], formatString)['transFormat']['datetime']
    elif isinstance(targetDate, datetime.datetime):
        targetDate = trans_date(targetDate, formatString, formatString)['transFormat']['datetime']

    code: str = ''

    if leftDate is not None:
        code += f"{trans_date(leftDate, formatString, formatString)['transFormat']['datetime'].__repr__()}{compare}"

    code += targetDate.__repr__()

    if rightDate is not None:
        code += f"{compare}{trans_date(rightDate, formatString, formatString)['transFormat']['datetime'].__repr__()}"

    # print(code)
    if not code:
        return False

    try:
        return eval(code)
    except:
        return eval(code.replace('datetime.', ''))


dateTime = "2023-12-12 17:59:25"

# 6:00 > 3:00
print(date_compare('6:00', ['03:00', "%H:%M"], compare='>'))
# 4:00 <= 3:00 <= 10:00
print(date_compare('04:00', ['03:00', "%H:%M"], '10:00', compare='<='))
# 17시 == (2023-12-12 17:59:25 -> 17시)
print(date_compare('17', ["2023-12-12 17:59:25", "%Y-%m-%d %H:%M:%S"], compare='==', formatString="%H"))
# 4:00 >= 2023-12-12 17:59:25 >= 10:00
print(date_compare('04:00', ["2023-12-12 17:59:25", "%Y-%m-%d %H:%M:%S"], '10:00', compare='>='))


dateTime = datetime(2022, 12, 12, 17, 59, 25)

# 04:00 >= 17:59 >= 10:00
print(date_compare('04:00', dateTime, '10:00', compare='>='))
# 59 25 == (2022-12-12 17:59:25 -> 59 25)
print(date_compare('59 25', dateTime, compare='==', formatString="%M %S"))
# 17:59:25 > 3:00:30
print(date_compare(targetDate=dateTime, rightDate='3:00:30', compare='>', formatString="%H:%M:%S"))
# 2022/10/01 <= 2022/12/12 <= 2023/04/05
print(date_compare('2022/10/01', dateTime, '2023/04/05', compare='<=', formatString="%Y/%m/%d"))

 

 

 

결과

 

공유하기

facebook twitter kakaoTalk naver band kakaostory Copy URL