欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python判断节假日 chinese_calendar

程序员文章站 2022-02-19 06:34:24
...
pip install chinesecalendar

支持 2004年 至 2021年

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

import datetime
import chinese_calendar
 
 
demo_time = datetime.date(2018, 10, 2) 
# 判断是否是节假日
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(2018, 10, 1)
chinese_calendar.get_holiday_detail(demo_time) # (True, 'National Day')
demo_time = datetime.date(2018, 8, 1)
chinese_calendar.get_holiday_detail(demo_time) # (False, None)

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

start_time = datetime.date(2018, 9, 1)
end_time = datetime.date(2018, 9, 15)

chinese_calendar.get_workdays(start_time,end_time)
# [datetime.date(2018, 9, 3), datetime.date(2018, 9, 4), datetime.date(2018, 9, 5), datetime.date(2018, 9, 6), datetime.date(2018, 9, 7), datetime.date(2018, 9, 10), datetime.date(2018, 9, 11), datetime.date(2018, 9, 12), datetime.date(2018, 9, 13), datetime.date(2018, 9, 14)]

chinese_calendar.get_holidays(start_time,end_time)
# [datetime.date(2018, 9, 1), datetime.date(2018, 9, 2), datetime.date(2018, 9, 8), datetime.date(2018, 9, 9), datetime.date(2018, 9, 15)]

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

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

或者封装方法:

from chinese_calendar import is_workday, is_holiday
import chinese_calendar as calendar
import time, datetime
def is_weekday(date):
        '''
        判断是否为工作日
        '''
        Y = date.year
        M = date.month
        D = date.day
        april_last = datetime.date(Y, M, D)
        return is_workday(april_last)
 
def is_holidays(date):
        '''
        判断是否为节假日
        '''
        Y = date.year
        M = date.month
        D = date.day
        april_last = datetime.date(Y, M, D)
        return is_holiday(april_last)
 
def is_festival(date):
    """
    判断是否为节日
    注意:有些时间属于相关节日的调休日也会显示出节日名称,可参考源码https://pypi.org/project/chinesecalendar/
    """
    Y = date.year
    M = date.month
    D = date.day
    april_last = datetime.date(Y, M, D)
    on_holiday, holiday_name = calendar.get_holiday_detail(april_last)
    return on_holiday, holiday_name   
 
 
if __name__ == "__main__":
    today = datetime.datetime.now()
    week = is_weekday(today)
    holiday = is_holidays(today)
    festival = is_festival(today)
    print("week-{}".format(week))
    print("holiday-{}".format(holiday))
    print("festival-{}-{}".format(festival[0], festival[1]))
相关标签: python