chinesecalendar:判斷日期是不是工作日

luckzack發表於2024-05-07

工作與學習中,有個場景需要判斷指定日期是不是工作日,例如自動化辦公工作日自動發郵件,量化交易判斷是否為交易日等等, 因此我們需要能準確判斷給的日期是不是工作日,Python中一般使用模組chinesecalendar來解決這個問題。

網友自己維護

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

# 判斷指定日期

is_workday(datetime(2020, 8, 1)) # 不是工作日,False
is_holiday(datetime(2020, 8, 1)) # 是休假日,True

# 判斷當天
is_workday() # 是不是工作日,True 為是
is_holiday() # 是不是休假日,True 為是

安裝

官方文件:https://pypi.org/project/chinesecalendar/

pip install chinesecalendar

使用

import datetime
from chinese_calendar import is_workday


# 判斷是否為工作日
date = datetime.datetime.now().date()

date2 = datetime.date(2023, 9, 25)

if is_workday(date2):
    print("是工作日")
else:
    print("是休息日")
    
# 判斷是否為調休日
from chinese_calendar import is_in_lieu

print(is_in_lieu(date2))

來自: 每日一模組:chinesecalendar

相關文章