方法一:自己写【需要动态更新每年的节假日】
from datetime import datetime
# 休:正常工作日(周一至周五)放假日期
holidays_exception = [
\'20200101\', # 元旦,周三
\'20200122\', # 如:公司提前放假
\'20200123\', # 如:公司提前放假
\'20200124\', # 除夕,周五
\'20200127\', # 春节,周一
\'20200128\', # 春节
\'20200129\', # 春节
\'20200130\', # 春节,周四
\'20200131\', # 新冠疫情国务院放假
\'20200201\', # 新冠疫情国务院放假
\'20200406\', # 清明,周一
\'20200501\', # 劳动节,周五
\'20200504\', # 劳动节,周一
\'20200505\', # 劳动节,周二
\'20200625\', # 端午,周二
\'20200626\', # 端午,周二
\'20201001\', # 国庆,周四
\'20201002\', # 国庆,周五
\'20201005\', # 国庆,周一
\'20201006\', # 国庆,周二
\'20201007\', # 国庆,周三
\'20201008\', # 国庆,周四
]
# 班:正常周末(周六和周五)上班日期
workdays_exception = [
\'20200201\', # 春节, 周六
\'20200426\', # 劳动节, 周日
\'20200509\', # 劳动节, 周六
\'20200628\', # 端午, 周日
\'20200927\', # 国庆,周六
\'20201010\', # 国庆,周六
]
def is_workday(day=None):
"""
Args:
day: 日期, 默认为今日
Returns:
True: 上班
False: 放假
"""
# 如果不传入参数则为今天
today = datetime.today()
# logger.info(today)
day = day or today
week_day = datetime.weekday(day) + 1 # 今天星期几(星期一 = 1,周日 = 7)
is_work_day_in_week = week_day in range(1, 6) # 这周是不是非周末,正常工作日, 不考虑调假
day_str = f\'{day.year}{str(day.month).zfill(2)}{str(day.day).zfill(2)}\'
if day_str in workdays_exception:
return True
elif day_str in holidays_exception:
return False
elif is_work_day_in_week:
return True
else:
return False
def is_holiday(day=None):
# 如果不传入参数则为今天
today = datetime.today()
day = day or today
if is_workday(day):
return False
else:
return True
# 判断指定日期
from datetime import datetime
is_workday(datetime(2020, 8, 1)) # 不是工作日,False
is_holiday(datetime(2020, 8, 1)) # 是休假日,True
# 判断当天
is_workday() # 是不是工作日,True 为是
is_holiday() # 是不是休假日,True 为是
方法二:模块
pip install chinesecalendar
import datetime
from chinese_calendar import is_workday
date = datetime.datetime.now().date()
date2 = datetime.date(2021, 9, 25)
if is_workday(date2):
print("是工作日")
else:
print("是休息日")