0

0

Python 业务时间计算的节假日排除方案

舞姬之光

舞姬之光

发布时间:2026-02-14 21:06:10

|

859人浏览过

|

来源于php中文网

原创

python 的 dateutil.rrule 不支持节假日感知,仅适用于规则周期场景;应预加载节假日 set 过滤 rrule 结果,或用 workalendar 并显式指定年份校验数据完整性,避免依赖实时 api 或手写逻辑出错。

python 业务时间计算的节假日排除方案

Python 用 dateutil.rrule 做工作日偏移容易漏掉节假日

直接用 rruleBYDAYcount 参数只能过滤周末,完全不感知法定节假日。比如调休上班日会被当成休息日跳过,而真正的假期(如国庆7天)里又可能混着工作日——rrule 没法动态识别。

实操建议:

立即学习Python免费学习笔记(深入)”;

FineVoice语音克隆
FineVoice语音克隆

免费在线语音克隆,1 分钟克隆你的声音,保留口音和所有细微差别。

下载
  • 别单独依赖 rrule 做业务时间推算,它只适合规则周期场景(如“每周三上午”),不是节假日感知型工具
  • 先用 dateutil.rrule.rrule 生成候选日期,再用节假日列表逐个过滤,但注意性能:1年要查365次,别在循环里重复读文件或发HTTP请求
  • 推荐把节假日数据预加载成 set,比如 holidays = {date(2024,1,28), date(2024,2,10), ...}in 查找是 O(1)

workalendar 库时要注意中国农历节日和调休逻辑

workalendar 提供了 China 日历类,但它默认只覆盖国务院发布的放假安排(需每年手动更新),且对调休日的判断依赖内置规则——比如它认为“周六补班”是工作日,但如果你的业务系统没同步当年调休表,结果就错。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 初始化时显式指定年份:cal = China(years=[2024]),否则默认只加载当前年,跨年计算会漏判
  • 调用 cal.is_working_day(date_obj) 前,确认该版本库已包含你所需年份的调休数据(查 GitHub release 或运行 cal.holidays(2024) 看返回长度是否为 11)
  • 不要信任 cal.add_working_days() 的链式调用结果——它内部用的是简单 while 循环+逐日试探,遇到长假(如中秋+国庆连休)可能多跳1–2天,务必用已知日期对结果做断言校验

datetime + 手写节假日判断函数的边界情况

自己维护一个节假日列表看似可控,但容易在三个地方出错:节气日(如冬至不算假)、纪念日(如抗战胜利日不放假)、以及最麻烦的「调休补班日」——它既不是周末也不是法定假日,却是实际工作日。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 国务院每年12月发布下一年放假安排,PDF 表格里「调休上班」那几行必须人工转成 date 对象加入 working_days_override 集合
  • 避免用字符串匹配判断节日,比如 "国庆" 可能出现在备注里,应严格比对日期值
  • 如果业务允许容忍1天误差,可把所有法定假日前后各延1天设为「缓冲区」,统一按休息日处理;否则必须精确到每个 date 实例

生产环境别用 requests 实时查节假日API

网上有些教程教用 HTTP 请求调第三方节假日 API(如 https://api.apihug.com/holiday/v1/...),线上跑着跑着就超时或限流,而且响应格式随时可能变,错误码也未必有文档。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 任何外部 HTTP 调用都必须加 fallback:本地缓存 JSON 文件 + 更新时间戳,API 失败时自动降级读缓存
  • 缓存文件路径建议硬编码,比如 ./data/holidays_2024.json,别拼接变量,防止路径穿越或空值报错
  • CI 流程中加入检查:每次部署前验证该 JSON 是否存在、能否 json.load()、是否包含至少10个 date 字段——少于这个数大概率是下载失败或格式损坏
事情说清了就结束。真正难的不是写代码,是每年12月盯着国务院官网等那份通知,然后一行行核对哪天补班、哪天放假。没人替你盯,也没法自动化。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

437

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

318

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

199

2023.11.20

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

102

2023.09.25

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

531

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

214

2023.09.04

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

76

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号