Python使用ZhDate库进行农历转换与日期计算

沈亦白
沈亦白
发布时间:2026-10-15 | 4人浏览过
原创

本文介绍如何使用Python第三方库ZhDate实现农历与公历的相互转换。该库内置1900至2100年数据,无需网络接口即可本地计算。教程涵盖基础安装、日期对象创建、阳历农历互转、闰月处理、中文日期输出以及结合datetime库计算距离特定节日天数的实战示例。

前言

在处理日常工作任务时,可能会遇到需要将日期转换为农历的需求。起初尝试寻找在线转换网站或API接口,但发现Python中有一个现成的库可以直接解决这一问题,因此整理此文与大家分享。

农历是中国现行的传统历法,其制定依据是月相的变化周期,以朔望月为一个月,同时参考太阳回归年确定一年的长度,并引入二十四节气和闰月机制,以确保平均历年长度与回归年相吻合。

对于数据处理场景而言,无需深入探究农历与公历之间复杂的转换算法。在Python中,ZhDate库提供了农历与公历互转、日期加减运算以及生成全中文日期格式的功能。该库内置了从1900年到2100年的农历数据,且仅依赖Python标准库,无需额外依赖。相关项目地址:github.com/CutePandaSh/zhdate

由于ZhDate是Python的第三方开源模块,使用前需进行安装和导入。请在命令行窗口中执行以下命令完成安装:

pip install zhdate

详细使用方法

使用zhdate库无需连接网络接口,即可在本地完成中国农历的计算,支持农历与阳历之间的双向转换。

阳历与农历日期的相互转换

在Python交互式环境中,可输入以下代码进行演示:

from zhdate import ZhDate

date1 = ZhDate(2022, 2, 2)  # 新建农历 2022年二月初二(龙抬头)的日期对象
print(date1)  # 直接返回农历日期字符串d

运行结果如下:

农历2022年2月2日

继续在交互式环境中输入以下命令,将农历日期转换为标准datetime对象:

t_date1 = date1.to_datetime()
t_date1

输出结果为:

datetime.datetime(2022, 3, 4, 0, 0)

若需将阳历日期转换为农历,可在交互式环境中输入以下命令:

from datetime import datetime

dt_date2 = datetime(2022, 2, 6)
date2 = ZhDate.from_datetime(dt_date2)  # 从阳历日期转换成农历日期对象
date2

输出结果为:

农历2022年1月6日

闰月

针对包含闰月的年份,可在交互式环境中输入以下命令进行验证:

date3 = ZhDate(2020, 4, 15)  # 新建农历 2020年4月15日
print(date3.to_datetime())

输出结果为:

2020-05-07 00:00:00

若该日属于闰月,再次执行转换命令:

date3 = ZhDate(2020, 4, 15)  # 新建农历 2020年闰4月15日
print(date3.to_datetime())

输出结果为:

2020-06-06 00:00:00

这意味着,出生于农历4月15日的人,在2020年可以在5月7日(平月)和6月6日(闰月)分别庆祝两次农历生日。

其他

如需生成中文格式的日期字符串,可在交互式环境中输入以下命令:

dt_date4 = datetime(2022, 3, 4)
date4 = ZhDate.from_datetime(dt_date4)
print(date4.chinese())

输出结果为:

二零二二年二月初二 壬寅年 (虎年)

获取当天对应的农历日期,可在交互式环境中输入以下命令:

ZhDate.today()

输出结果为:

农历2022年2月7日

此外,zhdate模块还支持日期运算。两个zhdate对象相减可计算两个农历日期的天数差,向zhdate对象加上整数则可返回相隔指定天数后的新农历对象。

实战:计算节日距离天数

下面通过一个实际案例来练习zhdate模块的使用。

假设需要快速计算今天距离某个特定节日还有多少天,可以结合zhdate库和datetime库来解决这一问题。

在交互式环境中输入以下代码:

today = datetime.now()
data_str = today.strftime('%Y-%m-%d')
data_str

输出结果为:

'2022-03-09'

计算距离五一劳动节的天数,可在交互式环境中输入以下命令:

oneDay = datetime(2022, 5, 1)
difference = oneDay.toordinal()-today.toordinal()
print(f'今天 {data_str} 距离五一劳动节还有 {difference} 天')

输出结果为:

今天 2022-03-09 距离五一劳动节还有 53 天

计算距离中秋节的天数,可在交互式环境中输入以下命令:

oneDay = ZhDate(2022, 8, 15).to_datetime()
difference = oneDay.toordinal()-today.toordinal()
print(f'今天 {data_str} 距离中秋节还有 {difference} 天')

输出结果为:

今天 2022-03-09 距离中秋节还有 185 天

读者可自行尝试计算距离其他节日的天数。在实战中,需注意区分该节日是依据公历还是农历设定,以便正确选择计算基准。

至此,关于Python实现农历转换的教程介绍完毕。如需了解更多Python相关农历处理内容,可搜索本站历史文章或继续浏览后续相关文章,感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表