파이썬으로 매주 n번째의 x요일을 구해야 하는 경우가 있다.
한국거래소 옵션만기일은 매월 2번째주 목요일이다.
수능의 경우 11월 둘째주 목요일이다.
매월 옵션만기일 및 수능의 날짜를 구하는 방법은 아래와 같다.
from datetime import datetime
# 월요일은 is 0, 목용일은 is 3
# helper 함수 추가
def nth_weekday(the_date, nth_week, week_day):
temp = the_date.replace(day=1)
adj = (week_day - temp.weekday()) % 7
temp += timedelta(days=adj)
temp += timedelta(weeks=nth_week-1)
return temp
# test = nth_weekday(datetime(2021,9,10), 2, 3)
# 옵션 만기일 구하기
def get_recent_due(mydate:datetime)->datetime:
# get 2nd thursday of the same month
thismonth_duedate = nth_weekday(mydate, 2, 3)
# in case today already passed the duedate (10/15) -> get nextmonth_duedate
if mydate <= thismonth_duedate:
return thismonth_duedate
elif mydate > thismonth_duedate :
nextmonth_duedate = nth_weekday(mydate+relativedelta(months=1),2, 3)
return nextmonth_duedate
# 특정 해의 수능일을 구하기
def get_ksat_date(year) -> datetime:
mydate = datetime(year,11,1)
result = nth_weekday(mydate, 2, 3)
return result