python通过lunarcalendar库使用农历日期
农历是非常重要的一种历法,春节,元宵节,中秋节,七夕节等等重要节日,都是通过农历日期来确定的,因此,能够在python程序中处理农历日期,也是非常重要的。本文介绍了lunarcalendar库的使用方法,可以帮助使用者非常好的了解农历使用。
农历日期库
介绍
lunarcalendar是一个处理农历日期的库
可以简单通过pip安装:pip install lunarcalendar
从公历转为农历
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)
更多推荐
所有评论(0)