安装模块:

pip3 install chinesecalendar

支持 2004年 至 2022年

判断某日是节假日还是工作日

import datetime
import chinese_calendar
 
demo_time = datetime.date(2021, 10, 1) 
# 判断是否是节假日
data_is_holiday = chinese_calendar.is_holiday(demo_time)  # True
# 判断某日是否工作日
data_is_workday = chinese_calendar.is_workday(demo_time)  # False

判断日期是否是节日,如果是节日返回是否休息日和节日名称,不是的话节日名称为None。如果某个周六日是某个节假日的调休,也会返回该节假日的名称。

demo_time = datetime.date(2021, 10, 1)
# 国庆日
chinese_calendar.get_holiday_detail(demo_time) # (True, 'National Day')

# 国庆之后第一个周六(需要补班)
demo_time = datetime.date(2021, 10, 9)
chinese_calendar.get_holiday_detail(demo_time) # (False, 'National Day')

# 国庆之后第一个周末(放假)
demo_time = datetime.date(2021, 10, 10)
chinese_calendar.get_holiday_detail(demo_time) # (True, None)

获取两个日期之间的节假日或者工作日,返回的结果为所有工作日或者休息日日期的列表。

start_time = datetime.date(2022, 1, 1)
end_time = datetime.date(2022, 1, 15)

# 2022年1月1-15的工作日
chinese_calendar.get_workdays(start_time,end_time)
# [datetime.date(2022, 1, 4), datetime.date(2022, 1, 5), datetime.date(2022, 1, 6), datetime.date(2022, 1, 7), datetime.date(2022, 1, 10), datetime.date(2022, 1, 11), datetime.date(2022, 1, 12), datetime.date(2022, 1, 13), datetime.date(2022, 1, 14)]

# 2022年1月1-15的休息日
chinese_calendar.get_holidays(start_time,end_time)
# [datetime.date(2022, 1, 1), datetime.date(2022, 1, 2), datetime.date(2022, 1, 3), datetime.date(2022, 1, 8), datetime.date(2022, 1, 9), datetime.date(2022, 1, 15)]

根据日期推算该日期后的第几个工作日的日期,比如2021年10月1日的第一个工作日日期是2021年10月08日,今天是2021年12月27日的话,下一个工作日日期是2021年12月28日。

demo_time = datetime.date(2021, 10, 1)
# 按日期推算工作日日期。可以接收两个参数,第一个参数是第几个工作日,第二个是从什么日期开始,不填默认是今天
next_workday = chinese_calendar.find_workday(1) # 2021-12-28
next_workday = chinese_calendar.find_workday(1,demo_time) # 2021-10-09

或者封装方法判断是否是工作日:

import arrow
from datetime import datetime
from chinese_calendar import is_workday

def is_trade_day(date):
    if is_workday(date):
        if date.isoweekday() < 6:
            return True
    return False

t = datetime.now() # 2021-12-27 11:24:08.539498
print(is_trade_day(t))  # True

t1 = datetime.strptime(arrow.now().shift(days=-1).format("YYYY-MM-DD"), '%Y-%m-%d').date() # 2021-12-26
print(is_trade_day(t1))  # False
最后修改:2022 年 05 月 05 日
如果觉得我的文章对你有用,请随意赞赏