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通常会更新和维护得更好,而且不需要我们自己处理复杂的计算。

最后,由于农历节日的计算和公历节日有所不同,我们可能需要根据我们的具体需求来调整代码,以确保它能够正确地识别和处理农历节日。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这8个学习诀窍,暑假帮孩子做好,开学老师刮目相看

家长快为孩子收藏这8个高效学习的诀窍吧!每天两小时,就能让孩子利用好暑假时光高效学习,打好基础! 一 和孩子协商 制定合理的学习计划 暑假,孩子很容易把学习抛在脑后。家长应当帮助孩子制定一个学习计…

grpc学习golang版( 四、多服务示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客户端五、测试六、示例代码 一、前言 多服务,即一个rpc提供多个服务给外界调用…

大语言模型(LLM)LangChain介绍

LangChain是一个利用大语言模型的能力开发各种下游应用的开源框架,它的核心理念是为各种大语言模型应用实现通用的接口,简化大语言模型应用的开发难度,主要的模块示意图为: Index:提供了各类文档导入、文本拆分、文本向…

STM32中五个时钟源:HSI、HSE、LSI、LSE、PLL

时钟系统是处理器的核心,或者说时钟是单片机的心脏。 1.单片机内部需要储存器、累加器,这些都需要逻辑门电路。比如锁存器就是一个D触发器,而触发器的置1、清0、置数的功能都需要跳变沿。D触发器就是上升沿后存入数据,而这个上升…

SAP CO11N BAPI_PRODORDCONF_CREATE_TT连续报工异步更新导致COGI解决方案

背景: 之前上一个项目上有同事碰到一个问题,外围接口数据进入SAP,可能会对同一工单同一工序进行连续多次报工,并且工序控制码配置的是会自动货物移动的,所以正常来说,调用完BAPI完之后除了报工数量会更新之…

需求之 实现获取调试信息在h5页面,在手机端可以查看调试(二)

事实证明 chatgpt很好用,有不懂的问题可以问它 https://zhuanlan.zhihu.com/p/690118775 国内外9个免费的ChatGPT网站 我筛选出来的比较好用免费的网站 fchat.dykyzdh.cn/ 这个也可以 阿里云的 通义灵码 在vscode中安装使用 而且阿里云有一个产品,可以…

我用过最好的GPT,NewspaceGPT使用心得

记住网址:https://newspace.ai0.cn 前言 只要你能表达明白,NewspaceGPT就不会让你失望。 Gpt4o预测GPT5 IT之家6月22日消息,在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&…

MATLAB | 怎样绘制这样的环形柱状图

Hey, 各位又是好久不见,最近忙到后台消息都有些来不及看,非常抱歉,今天带来一个环形柱状图绘制的简易小代码,绘制效果如下: 下面直接给出完整代码,替换一下数据即可,代码都有注释的: 完整代码 …

rk3568 Android 11在系统怎样执行命令获取SN号

目录 1. 使用ADB(Android Debug Bridge)2. 使用Shell脚本或应用程序3. 使用系统API4. 直接在设备上使用Shell5. getprop使用方法常见属性示例注意事项 在瑞芯微RK3568 Android 11系统中执行命令或获取SN号(序列号)通常可以通过几种…

PID理解

一、背景 pid理解 前几天看了bilibili的视频,链接:更好的理解PID【通过推小车的过程】,那个人使用matlab调整pid,另外使用推小车这个假设来解释pid。我其实当时也只是听懂一些,然后后面自己又琢磨。感觉是理解了。这…

python--fasApi学习(Dash+FastAPI框架)

在学习fastApi 框架时,发现了一个好用的框架,参考: 博客参考: https://blog.csdn.net/gitblog_00002/article/details/137331157下载文档并部署: 下载代码: git clone https://gitee.com/insistence2022/…

星戈瑞Sulfo-CY7 NHS Ester结构与荧光性质

【星戈瑞stargraydye】以下数据均来自文献资料,星戈瑞暂未进行独立验证, 仅供参考! Sulfo-Cy7 NHS Ester是一种应用于生物医学领域的荧光染料,其结构特性和荧光性质使其在荧光标记、组织成像和药物追踪等方面发挥着作用。 Sulfo-Cy7 NHS Ester的结构特性…

Dxf库中的DL_Extrusion类

类DL_Extrusion DL_Extrusion 是 DXF 库中的一个类,用于表示三维实体的扩展信息。在 DXF 文件中,DL_Extrusion 类通常用于表示具有高度的三维图形实体,如立方体、圆柱体等,以及其它具有体积的几何对象。 以下是一个简单的示例代…

python接口自动化测试数据和代码分离解析

common中存放的是整个项目中公共使用的封装方法 从工程目录上可以看到区分 datas中专门存放测试数据(yml文件) cases中专门集中存放测试用例 ... 数据分离的第一步先找到工程项目路径 1 2 3 4 5 6 7 8 9 10 11 12 # -*- encoding: utf-8 -*- """ __Software…

6月28日PolarDB开源社区长沙站,NineData联合创始人周振兴将带来《数据库DevOps最佳实践》主题分享

6月28日(周五),PolarDB 开源社区将来到湖南长沙,与湖南的开发者朋友们一起进行数据库技术交流!NineData 联合创始人周振兴受邀参加,并将带来《数据库 DevOps 最佳实践》的主题分享。 本次活动议程&#xff…

GEE问题——EEException:未注册 Earth Engine 或项目未注册。

问题 EEException:未注册 Earth Engine 或项目未注册。 EEException: Not signed up for Earth Engine or project is not registered. 解决方案 在谷歌社区里面这个问题已经被记录了: [Notice] Removing access for unregistered Cloud projects on 2024-06-17 查看下…

SpringBoot集成IotDB

1、引入依赖 <dependency><groupId>org.apache.iotdb</groupId><artifactId>iotdb-session</artifactId><version>0.14.0-preview1</version></dependency><dependency><groupId>cn.hutool</groupId><a…

JAVA小知识29:IO流(上)

IO流是指在计算机中进行输入和输出操作的一种方式&#xff0c;用于读取和写入数据。IO流主要用于处理数据传输&#xff0c;可以将数据从一个地方传送到另一个地方&#xff0c;例如从内存到硬盘&#xff0c;从网络到内存等。IO流在编程中非常常见&#xff0c;特别是在文件操作和…

如何使用Java中的正则表达式

如何使用Java中的正则表达式 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在Java开发中&#xff0c;正则表达式是处理文本和字符串的重要工具。本文将介绍如何…

第4章 客户端-Java客户端Jedis

1.获取Jedis maven配置加入项目中 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.2</version> </dependency>2.Jedis的基本使用 Jedis的使用方法非常简单&#xff0c;只要下面三…