首页Python【Python计算生态】c...

【Python计算生态】chinese-calendar——查看中国节假日安排

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

chinese-calendar是一个用于判断中国法定节假日和工作日的库,支持2004年至2025年,包括2020年的春节延长(疫情导致)。具有以下功能:
  • 判断某天是否是法定节假日。
  • 判断法定节假日是不是调休。
  • 支持日期范围查询(如获取某个月的工作日列表、节假日列表、24节气信息列表)等。
直接使用pip安装:
pip install chinesecalendar
需要注意的是,次年的节假日安排取决于国务院发布的日程,该库一般会在国务院更新以后发布新的版本(按照以往的经验,一般是每年的11月前后发布新版本),因此需定期更新库以获取最新信息。可通过以下方式更新版本:
pip install -U chinesecalendar

02
使用

chinese_calendar库主要提供了一系列用于处理中国日期相关信息的功能,涵盖工作日与休息日判断、日期范围处理、节气计算等,以下是对主要函数功能的概括总结:

  • 1、is_workdayh()和is_holiday()方法:

  • is_holiday(date)方法:

    用于判断给定的日期是否为中国的休息日(节假日)。如果该日期是休息日,则返回True;否则返回False

  • is_workday(date)方法:

    用于判断给定的日期是否为中国的工作日。如果该日期是工作日,则返回True;否则返回False

其中date参数可以是datetime.datedatetime.datetime类型的对象,表示要判断的日期(下同)。

# 判断 2018年4月30号 是不是节假日
from chinese_calendar import is_holiday, is_workday
april_last = datetime.date(2018, 4, 30)
print(is_workday(april_last))
# 输出:False
print(is_holiday(april_last))
# 输出:True


  • 2、get_holiday_detail()方法:

get_holiday_detail(date)方法用于检查某一天是否是中国的节假日,并返回节假日名称(如果是平常日,则返回None)。

# 在判断的同时,获取节日名
on_holiday, holiday_name = calendar.get_holiday_detail(april_last)
print(on_holiday)
# 输出:True
print(holiday_name)
# 输出:Labour Day(劳动节)


  • 3、is_in_lieu()方法:

is_in_lieu(date)法用于判断法定节假日是不是调休。

# 判断法定节假日是不是调休
print(calendar.is_in_lieu(datetime.date(2025, 1, 1)))
# 输出:False
print(calendar.is_in_lieu(datetime.date(2006, 2, 2)))
# 输出:True


  • 4、get_dates()方法:

get_dates(start, end)方法的主要功能是获取从起始日期到结束日期之间的所有日期,包含起始日期和结束日期本身。最终返回一个由datetime.date 对象组成的列表。

start = datetime.date(2023, 10, 1)
end = datetime.date(2023, 10, 5)

dates = calendar.get_dates(start, end)
print(dates)
# 输出:[datetime.date(2023, 10, 1), datetime.date(2023, 10, 2), datetime.date(2023, 10, 3), datetime.date(2023, 10, 4), datetime.date(2023, 10, 5)]


  • 5、get_holidays()方法:

get_holidays(start, end, include_weekends=True)方法的主要作用是获取从起始日期start到结束日期end之间的所有节假日,包含起始日期和结束日期本身。同时,该函数提供了一个可选参数include_weekends,用于控制是否将周六和周日(即周末)也视为节假日。返回一个由datetime.date对象组成的列表,列表中的每个元素代表一个节假日。

start_date = datetime.date(2025, 1, 1)
end_date = datetime.date(2025, 1, 5)
# 获取包含周末的节假日列表
holidays_with_weekends = calendar.get_holidays(start_date, end_date, include_weekends=True)
print("包含周末的节假日列表:", holidays_with_weekends)
# 输出:包含周末的节假日列表: [datetime.date(2025, 1, 1), datetime.date(2025, 1, 4), datetime.date(2025, 1, 5)]

# 获取不包含周末的节假日列表
holidays_without_weekends = calendar.get_holidays(start_date, end_date, include_weekends=False)
print("不包含周末的节假日列表:", holidays_without_weekends)
# 输出:不包含周末的节假日列表: [datetime.date(2025, 1, 1)]


  • 6、get_workdays()方法:

get_workdays(start, end, include_weekends=True)方法的主要功能是获取从起始日期start到结束日期end之间的所有工作日,并且包含起始日期和结束日期本身。函数提供了一个可选参数include_weekends,用于控制是否将周六和周日也视为工作日。最终返回一个由datetime.date对象组成的列表,列表中的每个元素代表一个工作日。

# 2025年1月26日周天为工作日
start_date = datetime.date(2025, 1, 1)
end_date = datetime.date(2025, 1, 31)
# 获取包含周末的工作日列表
workdays_with_weekends = calendar.get_workdays(start_date, end_date, include_weekends=True)
print("包含周末的工作日天数:", len(workdays_with_weekends))
# 输出:包含周末的工作日天数: 19

# 获取不包含周末的工作日列表
workdays_without_weekends = calendar.get_workdays(start_date, end_date, include_weekends=False)
print("不包含周末的工作日天数:", len(workdays_without_weekends))
# 输出:不包含周末的工作日天数: 18


  • 7、find_workday()方法:

find_workday(delta_days=0, date=None)方法函数用于查找距离指定日期 date之后(当delta_days为正数时)或之前(当delta_days为负数时)delta_days个工作日的日期。如果未指定date,则默认使用当前日期。

# 查找今天之后 2 个工作日的日期
date1 = calendar.find_workday(delta_days=2)
print("今天之后 2 个工作日的日期:", date1)
# 输出:今天之后 2 个工作日的日期: 2025-02-19

# 查找指定日期之前 1 个工作日的日期
specific_date = datetime.date(2024, 10, 10)
date2 = calendar.find_workday(delta_days=-1, date=specific_date)
print("指定日期之前 1 个工作日的日期:", date2)
# 输出:指定日期之前 1 个工作日的日期: 2024-10-09


  • 8、get_solar_terms()方法:

get_solar_terms(start, end)方法用于生成指定日期范围(从startend)内的 24 节气信息。它依据通用寿星公式[Y×D + C] – L来计算每个节气对应的公历日期,并将符合日期范围的节气信息(日期和节气名称)收集到一个列表中返回。该函数仅支持 1900 年到 2100 年之间的日期范围。

start_date = datetime.date(2025, 1, 28)
end_date = datetime.date(2025, 2, 4)
# 获取包含周末的工作日列表
solar_terms_list = calendar.get_solar_terms(start_date, end_date)
print("包含的24节气信息:", solar_terms_list)
# 输出:包含的24节气信息: [(datetime.date(2025, 2, 3), '立春')]


更多内容可以前往GitHub页面查看:

https://github.com/LKI/chinese-calendar

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments