我们知道中国上海证券交易所和深圳证券交易所日常交易日期为星期一到星期五,并且法定节假日不交易。
我们可以通过chinesecalendar模块判断某一天是否为工作日(中国法定工作日,调休的时候有可能周末也是工作日),通过datetime模块判断某一天是否为周末。
实际案例:判断离当天间隔N天是否为股票交易日,N可以为负数,正数时为当前日期N天前,负数时为当前日期N天后。
chinesecalendar模块
pip install chinesecalendar
有两个函数is_workday(date)-是否为工作日、is_holiday(date)-是否为节假日
内置datetime.date模块
有一个函数weekday()-某一天星期几 规则:星期一为0、星期天为6
比如2020-10-10日,为星期六,因为放假调休该日尽管是周末,但是工作日
比如2020-10-08日,为星期四,因为放假调休该日不是周末,但不是工作日
完整代码段
# -*- coding: utf-8 -*-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:chinese_workday.py
#日期:2020-10-16
#备注:中国节假日 pip install chinesecalendar https://pypi.org/project/chinesecalendar/
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
from chinese_calendar import is_workday, is_holiday
from datetime import date
from datetime import timedelta
def is_work_day():
april_last = date(2020, 10, 10) # datetime.date
print(is_workday(april_last)) # True
print(is_holiday(april_last)) # False
print(april_last.weekday()) # 5-星期六
# 当前日期N天前的证券交易日
def get_trade_day(n):
dt = date.today()
trade_day = '20201016'
if n < 0:
t = -n
else:
t = n
for i in range(100):
if n<0:
delta_day = timedelta(days=-i)
else:
delta_day = timedelta(days=i)
trade_day = dt-delta_day
if is_workday(trade_day) and trade_day.weekday()<5: # 工作日并且不是周末
if t ==0:
break
t = t -1
print(trade_day.strftime('%Y%m%d'))
return trade_day.strftime('%Y%m%d')
if __name__ == '__main__':
#is_work_day()
get_trade_day(-2)