python+lunarcalendar库实现使用农历日期

 更新时间:2024年11月03日 11:44:23   作者:仙草哥哥  
这篇文章主要为大家详细介绍了python如何通过lunarcalendar库实现使用农历日期,文中的示例代码简洁易懂,有需要的小伙伴可以参考一下

农历日期库

介绍

lunarcalendar是一个处理农历日期的库

可以简单通过pip安装:pip install lunarcalendar

lunarcalendar的github地址

 从公历转为农历

from lunarcalendar import Converter, Solar
 
solar = Solar(2024, 11, 1)
lunar = Converter.Solar2Lunar(solar)
 
print(lunar)
 
print(lunar.year)  # 农历年
print(lunar.month)  # 农历月
print(lunar.day)  # 农历日
 
print(lunar.isleap)  # 是否闰月

从农历转为公历

from lunarcalendar import Converter, Lunar
 
lunar = Lunar(2025, 2, 2, isleap=False)
 
solar = Converter.Lunar2Solar(lunar)
 
print(solar)
 
print(solar.year)  # 公历年
print(solar.month)  # 公历月
print(solar.day)  # 公历日
 
print(solar.to_date())  # 公历日期

节日与节气

遍历某年全部节日

from lunarcalendar.festival import festivals
 
 
for fest in festivals:
    print(fest.get_lang("zh"), fest(2025))

遍历某年全部的节气

from lunarcalendar.solarterm import solarterms
 
 
for st in solarterms:
    print(st.get_lang("zh"), st(2025))

在这种情况下,就可以很容易的根据节日/节气名,找到对应的节日,如

from lunarcalendar.festival import festivals
 
 
for fest in festivals:
    if fest.get_lang("zh") == "春节":
        for year in range(2025, 2036):
            print(f"{year}年的春节在:{fest(year)}")

这样,我们就可以轻松的看到每一年的春节都在什么时候了。

lunar-find

搜索节日与节气

安装lunarcalendar以后,同时会获得一个lunar-find工具,该工具可以搜索节日与节气,可以在不需要额外编写代码的情况下,查询到节日与节气。

如lunar-find 春节,将显示:春节 on 2024: 2024-02-10

当然,2024年春节早就过完了,显示2024年春节没有什么意义,我想要看2025年春节怎么办呢?

只需要简单的添加年份即可,如lunar-find 春节 2025,将显示:春节 on 2025: 2025-01-29

那么,一些与阴历无关的节日,如情人节,儿童节,包括一些节气,立春,冬至,同样也可以轻松得到结果。

搜索全部节日

搜索全部:lunar-find all

搜索全部节日:lunar-find festival

搜索全部节日(使用中文):lunar-find 节日

搜索全部节气:lunar-find solarterm

搜索全部节气(使用中文):lunar-find 节气

当我们使用:lunar-find festival 2025,就能够得到以下结果:

> 元旦 on 2025: 2025-01-01
> 腊八节 on 2025: 2025-01-07
> 小年 on 2025: 2025-01-22
> 除夕 on 2025: 2025-01-28
> 春节 on 2025: 2025-01-29
> 破五节 on 2025: 2025-02-02
> 元宵节 on 2025: 2025-02-12
> 情人节 on 2025: 2025-02-14
> 龙抬头 on 2025: 2025-03-01
> 妇女节 on 2025: 2025-03-08
> 植树节 on 2025: 2025-03-12
> 清明节 on 2025: 2025-04-04
> 复活节 on 2025: 2025-04-20
> 劳动节 on 2025: 2025-05-01
> 青年节 on 2025: 2025-05-04
> 母亲节 on 2025: 2025-05-11
> 护士节 on 2025: 2025-05-12
> 端午节 on 2025: 2025-05-31
> 儿童节 on 2025: 2025-06-01
> 父亲节 on 2025: 2025-06-15
> 七夕节 on 2025: 2025-08-29
> 中元节 on 2025: 2025-09-06
> 教师节 on 2025: 2025-09-10
> 国庆节 on 2025: 2025-10-01
> 中秋节 on 2025: 2025-10-06
> 重阳节 on 2025: 2025-10-29
> 万圣夜 on 2025: 2025-10-31
> 寒衣节 on 2025: 2025-11-20
> 感恩节 on 2025: 2025-11-27
> 冬节 on 2025: 2025-12-21
> 平安夜 on 2025: 2025-12-24
> 圣诞节 on 2025: 2025-12-25

农历日期格式化

农历日期格式类

通常情况下,我们描述农历日期的时候,会说“正月初一”,“八月十五”,因此,我们还需要一种方法,将农历的数字日期对应到我们常说的日期,以实现如日历等功能。

from lunarcalendar import Converter, Solar
 
class LunarStr:
    months = ["正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
    days = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十",
            "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十",
            "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"]
 
    @classmethod
    def from_year_month_day(cls, year, month, day):
        solar = Solar(year, month, day)
        lunar = Converter.Solar2Lunar(solar)
        return cls(lunar)
 
    def __repr__(self):
        return f"LunarStr(year={self.year}, month={self.month}, day={self.day})"
 
    def __init__(self, lunar):
        self.year = lunar.year
        self.month = lunar.month
        self.day = lunar.day
        try:
            self.month_str = self.months[lunar.month - 1]
            self.day_str = self.days[lunar.day - 1]
        except IndexError:
            raise ValueError("月份或日期超出有效范围!")
        if lunar.isleap:
            self.month_str = "闰" + self.month_str
 
    def get_calendar_date_str(self):
        if self.day == 1:
            return self.month_str
        else:
            return self.day_str
 
    def get_date_str(self):
        return self.month_str + self.day_str

使用方法

我们可以通过创建一个农历日期,然后得到对应的农历日期表达方式。

from lunarcalendar import Converter, Solar
 
solar = Solar(2024, 11, 1)
lunar = Converter.Solar2Lunar(solar)
date_str = LunarStr(lunar).get_date_str()
print(date_str)

也可以直接使用年月日,来直接得到农历日期的常用表达方式。

date_str = LunarStr.from_year_month_day(2024, 11, 1).get_date_str()
print(date_str)

到此这篇关于python+lunarcalendar库实现使用农历日期的文章就介绍到这了,更多相关python lunarcalendar农历日期内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python网络请求之Requests库的高级功能运用

    Python网络请求之Requests库的高级功能运用

    在这篇文章中我们将进一步深入学习Requests库的高级功能,包括处理重定向,设置超时,处理大文件以及错误和异常处理,需要的朋友可以参考下
    2023-08-08
  • Python利用Scrapy框架爬取豆瓣电影示例

    Python利用Scrapy框架爬取豆瓣电影示例

    这篇文章主要介绍了Python利用Scrapy框架爬取豆瓣电影,结合实例形式分析了Python使用Scrapy框架爬取豆瓣电影信息的具体操作步骤、实现技巧与相关注意事项,需要的朋友可以参考下
    2020-01-01
  • PyQt5 matplotlib画图不刷新的解决方案

    PyQt5 matplotlib画图不刷新的解决方案

    这篇文章主要介绍了PyQt5 matplotlib画图不刷新的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python搭建Gitee图床的示例代码

    Python搭建Gitee图床的示例代码

    在写博客的过程中经常要插入图片,本文将使用Python实现对上传的图片自动压缩,自动编码,以及自动推送到远程仓库,感兴趣的可以了解一下
    2021-10-10
  • pandas 时间偏移的实现

    pandas 时间偏移的实现

    时间偏移就是在指定时间往前推或者往后推一段时间,即加减一段时间之后的时间,本文使用Python实现,感兴趣的可以了解一下
    2021-08-08
  • Python办公自动化之文件的比较合并与xml操作

    Python办公自动化之文件的比较合并与xml操作

    这篇文章主要为大家详细介绍了Python办公自动化之文件的比较合并与xml文件操作的相关知识,文中的示例代码讲解详细,需要的可以参考一下
    2023-12-12
  • 更新升级python和pip版本后不生效的问题解决

    更新升级python和pip版本后不生效的问题解决

    这篇文章主要介绍了更新升级python和pip版本后不生效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python字符串类型及格式化问题

    Python字符串类型及格式化问题

    这篇文章主要介绍了Python字符串类型及格式化问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python连接SQLite数据库操作实战指南从入门到精通

    Python连接SQLite数据库操作实战指南从入门到精通

    在Python中使用SQLite进行数据库操作时,我们将深入研究SQLite数据库的创建、表格管理、数据插入、查询、更新和删除等关键主题,帮助你全面了解如何使用SQLite进行数据库操作
    2023-11-11
  • 使用Python与MQTT实现异步通信功能

    使用Python与MQTT实现异步通信功能

    物联网(IoT)和实时通信的世界中,消息队列遥测传输(MQTT)协议因其轻量级、可靠性和实时性成为广受欢迎的选择,本文给大家介绍了使用Python与MQTT实现异步通信功能,需要的朋友可以参考下
    2024-12-12

最新评论