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']
반응형