MINERVA/Python 2023. 4. 28. 12:35
반응형

공휴일과 대체 공휴일 확인을 위해서, nework API를 통해서 확인하는 부분을 정적으로 전환(이유: 방화벽과 속도 문제등)

 

import time
import datetime
from pytimekr import pytimekr

# alternative holiday: 대체휴일
alterHolidayList = ['20230124','20230501','20230529']

# 주말(weekend) & 연휴(holiday) & 대체휴일(alterHolidayList)
def CheckOffDay(d):
    holidayList = pytimekr.holidays()
    bHoliday = holidayList.__contains__(d)
    bWeekday = d.weekday() > 4
    strCheckDay = d.strftime('%Y%m%d')
    bAlterday = alterHolidayList.__contains__(strCheckDay)
    return(bWeekday or bHoliday or bAlterday)

# working day를 구해서 list로 반환
def GetWorkingDay(strBaseDay,nWorkingDay = 1):  # 1은 당일 하루를 의미
    nWorkingDayList = []

    # string -> datatime
    dtBaseDay = datetime.datetime.strptime(strBaseDay, '%Y%m%d')
    print(dtBaseDay)
    print(dtBaseDay.date())

    for day in range(0,nWorkingDay):

        while CheckOffDay(dtBaseDay.date()):
            dtBaseDay = dtBaseDay - datetime.timedelta(days=1)

        nWorkingDayList.append(dtBaseDay.strftime('%Y%m%d'))
        dtBaseDay = dtBaseDay - datetime.timedelta(days=1)

    return nWorkingDayList
if __name__ == '__main__':

    strBaseDay  = '20230505'    # 보통 오늘 기준으로 시총, 상장주식수등 고려
    nWorkingDay = 6             # 오늘 포험, 실제 일하는 날만

    dayList = GetWorkingDay(strBaseDay,nWorkingDay)
    print(dayList)

라이브 코드에서, 해당 기능 단위 테스트 코드부분을 발취

 

[실행결과]

['20230504', '20230503', '20230502', '20230428', '20230427', '20230426']

반응형
posted by choiwonwoo
: