python holidays获取中国节日
在Python中,holidays
库是一个流行的库,用于处理各种国家和地区的公共假期。然而,需要注意的是,截至2024年,holidays
库的官方版本可能并不直接支持中国的所有节日。不过,我们可以通过扩展或自定义该类库来添加中国的节日。
1.使用holidays
库的基础框架来创建一个自定义的中国节日
以下是一个示例,说明如何使用holidays
库的基础框架来创建一个自定义的中国节日类:
(1)首先,我们需要安装holidays
库(如果尚未安装):
bash复制代码
pip install holidays
(2)然后,我们可以创建一个自定义的ChineseHolidays
类,该类继承自holidays.HolidayBase
,并添加中国的节日:
import holidays
from datetime import date class ChineseHolidays(holidays.HolidayBase): """自定义的中国节日类""" def __init__(self, years, **kwargs): # 初始化父类 holidays.HolidayBase.__init__(self, **kwargs) # 填充中国节日,这里仅举几个例子 self[date(2024, 1, 1)] = "元旦" self[date(2024, 2, 10)] = "春节" self[date(2024, 2, 24)] = "元宵节" self[date(2024, 4, 4)] = "清明节" self[date(2024, 5, 1)] = "劳动节" self[date(2024, 6, 10)] = "端午节" self[date(2024, 9, 17)] = "中秋节" self[date(2024, 10, 1)] = "国庆节" # 对于每年的固定节日,我们可以使用循环来添加 for year in years: # 例如,每年的农历新年(春节)和国庆节可能需要更复杂的计算 # 这里为了示例,我们仅添加国庆节 self[date(year, 10, 1)] = "国庆节" # 使用自定义的中国节日类
cn_holidays = ChineseHolidays([2024]) # 打印2024年的所有节日
for dt, name in sorted(cn_holidays.items()): print(f"{dt}: {name}")
注意:上面的代码仅作为示例,并没有包含农历日期的计算,因为holidays
库主要处理公历日期。对于农历日期(如春节、端午节、中秋节等),我们可能需要使用其他库(如lunardate
)或手动计算。
对于动态计算农历节日,我们可以查找农历算法的Python实现或使用第三方API来获取这些节日的日期。由于这通常涉及到复杂的历法计算,这里不会详细介绍具体的实现。
最后,holidays
库或其他相关库可能会在未来的版本中增加对中国节日的支持,所以请广大读者检查最新的文档和更新。
2.创建一个完整的中国节日代码示例
要创建一个完整的中国节日代码示例,我们需要考虑如何计算农历日期,因为中国的许多传统节日是基于农历的。由于直接计算农历日期在Python中比较复杂,我们可以使用第三方库如lunardate
或者lunarcalendar
来帮助我们。然而,这些库可能并不总是最新的,或者可能不包含所有需要的节日算法。
下面是一个简化的示例,展示如何使用lunarcalendar
库(如果可用)来识别一些基于农历的中国节日,并结合holidays
库来处理公历节日。但是请注意,lunarcalendar
库(如果存在)可能不是广泛可用的,我们可能需要查找其他资源或自己编写农历算法。
(1)首先,我们需要安装可能需要的库(如果它们存在的话):
pip install holidays
# 假设存在一个lunarcalendar库,但实际上我们可能需要查找替代方案
# pip install lunarcalendar # 这个命令可能并不适用,因为lunarcalendar库可能不存在或不可用
(2)然后,我们可以编写一个自定义的ChineseHolidays
类:
import holidays
from datetime import date
# 假设存在一个lunarcalendar库,但实际上我们可能需要编写自己的逻辑或使用其他资源
# from lunarcalendar import LunarDate # 这个导入可能不适用 class ChineseHolidays(holidays.UnitedStates): # 可以从holidays.HolidayBase继承,但为了简单起见,这里使用UnitedStates作为基类 """自定义的中国节日类""" def __init__(self, years, **kwargs): holidays.HolidayBase.__init__(self, **kwargs) # 添加公历节日 self[date(years[0], 1, 1)] = "元旦" self[date(years[0], 5, 1)] = "劳动节" self[date(years[0], 10, 1)] = "国庆节" # 假设我们有一个函数可以计算农历节日的公历日期 # 这里我们使用占位符函数和手动添加的日期作为示例 def get_lunar_festival(year, festival_name): # 这里应该是计算农历节日公历日期的逻辑 # 由于复杂性,这里直接返回示例日期 if festival_name == "春节": return date(year, 2, 5) # 仅为示例,实际日期需要计算 elif festival_name == "清明节": return date(year, 4, 5) # 清明节通常在公历4月,但具体日期需要基于农历计算 # ... 添加其他农历节日的计算逻辑 return None # 添加农历节日(这里使用假设的函数和硬编码的日期作为示例) for year in years: self[get_lunar_festival(year, "春节")] = "春节" self[get_lunar_festival(year, "清明节")] = "清明节" # ... 添加其他农历节日 # 使用自定义的中国节日类
cn_holidays = ChineseHolidays([2024]) # 打印2024年的所有节日
for dt, name in sorted(cn_holidays.items()): print(f"{dt}: {name}")
重要提示:上面的代码中的get_lunar_festival
函数是一个占位符。在实际应用中,我们需要使用真实的农历计算逻辑来替换它。由于农历计算的复杂性,这通常涉及查找表、插值或其他复杂的数学方法。
如果我们找不到合适的库来处理农历日期,我们可能需要查找农历算法的Python实现,或者考虑使用在线API来获取农历节日的日期。
3. Python中实现一个完整的农历(阴历)算法
直接在Python中实现一个完整的农历(阴历)算法是非常复杂的,因为这涉及到天文计算、闰月规则、节气划分等多个方面。不过,我们可以使用现有的第三方库来简化这个过程。
目前,没有一个广泛被接受的Python库可以完美地处理农历节日的计算,但是有几个库可以帮助我们部分实现这一功能。比如,lunarcalendar
(如果它存在的话)或者chinese-calendar
(一个更为常见和更新的库)。
以下是一个使用chinese-calendar
库(如果可用)的示例代码,该库可以帮助我们获取农历日期和一些常见的农历节日:
首先,我们需要安装chinese-calendar
库(如果它存在):
bash复制代码
pip install chinese-calendar # 注意:这个库可能不存在或者名称不同,我们需要查找正确的库名
但是,由于chinese-calendar
库可能不存在或者不包含所有我们需要的节日,我将给出一个基于假设的库使用的示例代码,并解释如何结合holidays
库使用它(如果这样的库存在):
import holidays
from datetime import date
from chinese_calendar import is_holiday # 假设存在这样的库和函数 class ChineseHolidays(holidays.HolidayBase): """自定义的中国节日类""" def __init__(self, years, **kwargs): holidays.HolidayBase.__init__(self, **kwargs) # 添加公历节日 self[date(years[0], 1, 1)] = "元旦" self[date(years[0], 5, 1)] = "劳动节" self[date(years[0], 10, 1)] = "国庆节" # 假设 chinese_calendar 库提供了 is_holiday 函数来判断是否是农历节日 for year in years: for month in range(1, 13): # 农历有12个月,但我们需要遍历1到12来检查闰月 for day in range(1, 31): # 通常一个月最多30或31天,但农历不同 dt = date(year, month, day) lunar_date = self._convert_to_lunar(dt) # 假设我们有一个转换函数 if is_holiday(lunar_date): # 检查是否是农历节日 holiday_name = self._get_lunar_holiday_name(lunar_date) # 假设我们有一个获取节日名称的函数 self[dt] = holiday_name def _convert_to_lunar(self, dt): # 这里应该是将公历日期转换为农历日期的逻辑 # 由于复杂性,这里只是一个占位符 pass def _get_lunar_holiday_name(self, lunar_date): # 这里应该是根据农历日期获取节日名称的逻辑 # 由于复杂性,这里只是一个占位符 pass # 假设我们已经有了 ChineseHolidays 类和所需的函数
cn_holidays = ChineseHolidays([2024]) # 打印2024年的所有节日
for dt, name in sorted(cn_holidays.items()): print(f"{dt}: {name}")
注意:上面的代码中的_convert_to_lunar
和_get_lunar_holiday_name
函数是假设存在的,我们需要自己实现它们或者查找现有的库来帮助我们完成这些功能。
如果我们找不到合适的库,我们可能需要查找农历算法的Python实现,或者考虑使用在线API来获取农历节日的日期。在线API通常会更新和维护得更好,而且不需要我们自己处理复杂的计算。
最后,由于农历节日的计算和公历节日有所不同,我们可能需要根据我们的具体需求来调整代码,以确保它能够正确地识别和处理农历节日。
相关文章:
python holidays获取中国节日
在Python中,holidays库是一个流行的库,用于处理各种国家和地区的公共假期。然而,需要注意的是,截至2024年,holidays库的官方版本可能并不直接支持中国的所有节日。不过,我们可以通过扩展或自定义该类库来添…...

Jenkins流水线发布,一篇就解决你的所有疑惑
这次搭建的项目比较常规,前端是react写的,后端是springboot,并且由于是全栈开发,所以是在同一个项目中。接下来我演示下怎么用jenkins进行自动化发布。 1.jenkins必装插件 这里用到的是jenkinsFile主要是基于Groovy这个沙盒,有些前置插件。这里使用maven进行打包,所以需…...

安装zabbix时报错Could not resolve host: mirrors.huaweicloud.com;Unknown error解决办法
目录 1、问题原因 2、解决办法 3、知识拓展 DNS的区别 DNS配置文件解析 域名解析过程 4、书籍推荐 当安装Zabbix server,Web前端,agent时出现: [rootsc-zabbix-server ~]# yum install zabbix-server-mysql zabbix-agent安装过程中会出…...
【Linux】CentOS 7 安装配置 postfix 邮件服务器随笔
本文并不是完整配置教程,只是配置过程中零散代码随笔,不成系统 记录配置 PostFix 邮件服务器过程,由于经常用到,会不定时更新完善 yum install -y postfix dovecot cyrus-sasl-plain cyrus-sasl mailx# 设置hostname hostnamect…...

vue3 使用JsMind的方法,以及引入提示报错,无法找到模块“jsmind”的声明文件
最终结果: 一、使用:使用yarn或者npm 安装 yarn add jsmind npm install vue-jsmind 二、引入 两种方法:(如果这样引入没问题按照这样引入) import "jsmind/style/jsmind.css"; import JsMind from &quo…...

狗都能看懂的DBSCAN算法详解
文章目录 DBSCAN简介DBSCAN算法流程运行机制举个实例 DBSCAN算法特点DBSCAN参数选取技巧 ϵ \epsilon ϵ的选取:找突变点MinPts的选取 DBSCAN简介 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的…...
运维岗高危操作
序号 高危操作指令 可能存在风险 维护操作要求 1 rm –rf rm –rf是删除文件夹和里面附带内容的一种最快捷的方法,可能会文件误删,导致数据丢失 使用rm –rf命令时千万要小心,可以在.bashrc里面添加: alias rm ‘rm -i’ ,…...

【ajax基础02】URL详解
目录 一:什么是URL 二:URL组成 协议 编辑 域名(在url中必须写) 资源路径 三:URL查询参数 定义: 语法格式: 如何利用axios实现特定数据查询: 语法格式: 案例:…...

MySQL 7种Join的定义图解示范结果(所有join类型)
文章目录 MySQL 7种Join的定义&图解&示范&结果(所有join类型)基本知识笛卡尔积 建表&填充数据1-Join不带条件account筛选 1-Inner Join 内连接不带条件account相同where筛选玩点特殊的 2-Left Join 左连接不带条件account筛选 3-Right J…...
在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南
在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南 在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南准备工作安装步骤1. 更新系统2. 启用 EPEL 仓库3. 启用 RPM Fusion 仓库4. 安装 DNF 插件核心包5. 启用 CodeReady Builder 仓库6. 安装 FFmpeg7. 验证安装 可能遇到的问题注意事项…...
python爬虫之实现edge无头浏览器和规避检测
python爬虫之实现edge无头浏览器和规避检测 爬取百度网页源码但不打开浏览器 实现代码如下: #需求:实现edge无头浏览器和规避检测 from selenium import webdriver from time import sleep from selenium.webdriver.edge.options import Options# 实现…...
每天一个数据分析题(三百八十七)- 线性回归分析
下列关于线性回归分析中的残差(Residuals)的假设说法正确的是? A. 残差均值总是为零 B. 残差均值总是小于零 C. 残差均值总是大于零 D. 以上说法都不对 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取…...
Perl中的eval块:深入解析与应用
引言 Perl是一种功能强大的脚本语言,以其灵活性和强大的文本处理能力而闻名。在Perl编程中,eval块是一个非常重要的特性,它允许开发者捕获和处理异常,同时也提供了一种执行动态代码的方法。本文将详细探讨eval块的作用、用法以及…...
分享AI学习笔记之Python
当你说"抓取网站数据"时,通常指的是网络爬虫(web scraping)或网络抓取(web crawling)。Python提供了很多库可以帮助你实现这个功能,其中最常见的有requests(用于发送HTTP请求…...
多版本GCC安装及切换
目录 1 背景2 安装2.1 Ubuntu 20.042.2 Ubuntu 18.04 3 配置4 切换4.1 切换到版本94.2 切换到版本10 1 背景 最近在研究C20中的协程需要安装GCC版本10。用到GCC多版本切换,记录步骤。 2 安装 2.1 Ubuntu 20.04 运行如下命令安装两个版本编译器: sudo apt insta…...

Redis进阶 - 朝生暮死之Redis过期策略
概述 Redis 是一种常用的内存数据库,其所有的数据结构都可以设置过期时间,时间一到,就会自动删除。你可以想象 Redis 内部有一个死神,时刻盯着所有设置了过期时间的 key,寿命一到就会立即收割。 你还可以进一步站在死神…...

MySQL实训--原神数据库
原神数据库 er图DDL/DML语句查询语句存储过程/触发器 er图 DDL/DML语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS artifacts; CREATE TABLE artifacts (id int NOT NULL AUTO_INCREMENT,artifacts_name varchar(255) CHARACTER SET utf8 COLLATE …...

Retrieval-Augmented Generation for Large Language Models A Survey
Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 文章目录 Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 Abstract背景介绍 RAG概述原始RAG先进RAG预检索过程后检索过程 模块化RAGModules部分Patterns部分 RAG…...

【曦灵平台】深度体验百度智能云曦灵平台之数字人3.0、声音克隆、直播等功能,AI加持就是不一样,快来一起体验
目录 资产数字人 2D数字人克隆声音克隆 AI卡片更多功能总结推荐文章 资产 可进行人像与声音的定制,让数字人形象和声音成为我们的专属资产,用于后续的内容生产工作 数字人 这里拍摄的视频分辨率和帧率必须要确保是官方要求,这里博主通过第…...

如何使用GPT?初学者的指南
ChatGPT是一个非常先进的AI工具,它使用GPT-4架构,能够生成自然的语言回应。它的多功能性和理解复杂指令的能力,使得很多人用它来回答各种问题,就像用Google一样输入关键词。不过,ChatGPT还能做更多事情,下面…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...