sunxiuwen

方法一:自己写【需要动态更新每年的节假日】

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("是休息日")

分类:

技术点:

相关文章: