Python判断节假日的几种方式,你学废了吗?

最近在推进信息安全巡检的工作,按公司制度要求和信息安全标准,要求按时对硬件设备、网络、机房、应用系统、数据库等等做巡检工作。为了保证达到信息安全的目标,要求在每周四和节假日的前一天对各类设备和系统进行巡检。

1、使用holidays库判断节假日

安装 holidays库

cmd 复制代码
pip install holidays

使用它,Use it!~ 不要太简单好吗?

python 复制代码
from datetime import date

cn_holidays = holidays.China()

def is_holiday(date):
    return date in cn_holidays

print(is_holiday(date(2024,5,1)))

直接打印出来个Labor Day, WTF, 看来对中文的支持不算友好?当然!有老哥已经开发出来个Holiday-CN, 666啊。这个大家感兴趣的可以去看看。

2、使用chinesecalendar判断节假日

认准文档:check if some day is holiday in China

判断日期是否为工作日:chinese_calendar 提供了 is_workday() 函数,可以判断指定日期是否为工作日,包括周末、法定节假日等。

判断日期是否为节假日:chinese_calendar 提供了 is_holiday() 函数,可以判断指定日期是否为中国的法定节假日。

python 复制代码
import datetime

# 判断 2024年5月1号 是不是节假日
from chinese_calendar import is_holiday, is_workday
labor_day = datetime.date(2024, 5, 1)
print(is_workday(labor_day))
print(is_holiday(labor_day))

获取节假日信息:chinese_calendar 提供了一系列函数用于获取节假日的详细信息,如 get_holiday_detail() 可以获取指定日期的节假日名称、类型和放假天数等信息。

python 复制代码
# 或者在判断的同时,获取节日名
import chinese_calendar as calendar  # 也可以这样 import
on_holiday, holiday_name = calendar.get_holiday_detail(labor_day)
print(on_holiday)
print(holiday_name)
print(calendar.Holiday.labour_day.value)

# 还能判断法定节假日是不是调休
import chinese_calendar
print(chinese_calendar.is_in_lieu(datetime.date(2024, 5, 6)))
print(chinese_calendar.is_in_lieu(datetime.date(2024, 5, 3)))

计算两个日期之间的工作日天数:chinese_calendar 提供了 get_workdays() 函数,用以获取两个日期之间的工作日,变一下可以计算两个日期之间的工作日天数。

python 复制代码
# 计算两个工作日之间的天数
print("距离五一你还要干%s天" % len(chinese_calendar.get_workdays(datetime.date(2024,4,15), datetime.date(2024,5,1))))

## 距离五一你还要干13天

3、调用接口或爬取数据判断节假日

这个目前接口有很多个,有免费的也有收费的。

当然我们也可以自己写爬虫来获取国家发布的节假日。然后,对里面的内容做一些解析和处理就行了

python 复制代码
import requests
from bs4 import BeautifulSoup

#获取国务院节假日安排,包括调休
def getChineseHolidays(year): 
    #2024年放假安排url
    url = "https://www.gov.cn/zhengce/content/202310/content_6911527.htm"
     # Get方式获取网页数据
    rep = requests.get(url) 
    rep.encoding = 'utf-8'
    soup = BeautifulSoup(rep.text, 'html.parser')
    pList = soup.find_all('p')
    for item in pList:
        p = item.text
        if ':' in p and '放假' in p:   #找出节日对应的几行内容
            print(p)
            
if __name__ == '__main__':
    getChineseHolidays(2024)

4、结束语

大家请注意,使用 holidays 库和 chinesecalendar 库 可能不包含所有中国的公共假期,特别是那些具有地方性的假期或临时宣布的假期。此外,由于中国的假期政策可能会随着时间变化,因此建议定期检查库的更新。当然,我们也能在执行节假日判断前,用代码定期或执行时更新库。

用万年历接口的话,除非网络问题、接口被修改或停止维护了,其它基本OK的。

你学废了吗?

话说,看到今年的五一放假安排,我的内心从愤怒到沉默,沉默到愤怒,来回摩擦。

啥时候能真正放个不调休的好假?

相关推荐
计算机编程小咖35 分钟前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
CTRA王大大1 小时前
【golang】制作linux环境+golang的Dockerfile | 如何下载golang镜像源
linux·开发语言·docker·golang
zhangfeng11332 小时前
以下是基于图论的归一化切割(Normalized Cut)图像分割工具的完整实现,结合Tkinter界面设计及Python代码示
开发语言·python·图论
flashlight_hi2 小时前
LeetCode 分类刷题:2529. 正整数和负整数的最大计数
python·算法·leetcode
Ashlee_code3 小时前
香港券商櫃台系統跨境金融研究
java·python·科技·金融·架构·系统架构·区块链
还梦呦3 小时前
2025年09月计算机二级Java选择题每日一练——第五期
java·开发语言·计算机二级
Jia-Hui Su3 小时前
GDSFactory环境配置(PyCharm+Git+KLayout)
git·python·pycharm
鱼鱼说测试3 小时前
postman接口自动化测试
开发语言·lua
從南走到北3 小时前
JAVA国际版东郊到家同城按摩服务美容美发私教到店服务系统源码支持Android+IOS+H5
android·java·开发语言·ios·微信·微信小程序·小程序
_不会dp不改名_4 小时前
C++ 20: Concepts 与Requires
开发语言·c++20