Python中使用zhDateTime库进行农历公历日期转换与中文时间输出
在Python中,我们可能经常使用zhdate
库来输出农历日期,但实际上,这个库已经很久没有更新了,zhdate库的作者也并未把最近一次的更新后提交到pypi上,这就造成了部分bug未改善,新旧特性矛盾等一些问题。
于是,新的中式日期时间库zhDateTime
,既解决了上述库中提交的所有问题,又新增了更多的特性,更适合解决农历日期、中文时间的问题。同时,zhDateTime
库使用的MPLv2.0协议也使得其更易于商用,解决了zhdate
使用GPLv3的商用问题。
同样作为中文农历日期库,zhDateTime
功能强大,体积轻巧,没有很多复杂的使用方式,简单易上手。接下来我们就来逐一介绍zhDateTime
的全部功能。
库的下载与安装
使用
pip install --upgrade zhDateTime
从Pypi下载安装zhDateTime库
农历公历日期转换
zhDateTime
库中DateTime
类继承了datetime
库的datetime
类,其使用方法与datetime类别无二致,同时,新增了自农历转换和转换至农历的功能。而zhDateTime
类的实现,则使农历日期自身的存储和汉字表达变得更加方便。
- 取用日期类
from zhDateTime import DateTime, zhDateTime
- 创建日期、转换日期
# 利用DateTime类创建公历日期 solar_date = DateTime(2020,5,20) # 利用to_lunar函数转换为农历日期 lunar_date = solar.to_lunar() # 利用zhDateTime类创建农历日期 date_lunar = zhDateTime(2024,3,False,13) # 此处之False示意是否为闰月 # 利用to_solar函数转换为公历日期 date_solar = date_lunar.to_solar() # 也可以通过各自的类函数进行自主创建 a_solar_date = DateTime.from_lunar(2024,3,False,13) a_lunar_date = zhDateTime.from_solar(2020,5,20)
- 中文日期的汉字化输出
输出应类似以下# zhDateTime类可以进行汉字化输出 DateTime.now().to_lunar().hanzify() # 也可以分日期和时间输出不同部分 DateTime.now().to_lunar().date_hanzify() DateTime.now().to_lunar().time_hanzify()
"二〇二四 甲辰龙年三月十三日 午时 零十四分三秒九二 余十九微七十八纤" "二〇二四 甲辰龙年三月十二日" "午时三刻 又一分三十秒三九 余五十五微六十纤"
- 日期的加减计算
输出应类似如下( zhDateTime(2024,3,False,12) + ( DateTime.now() - DateTime(2024,3,1) # 两个DateTime类相减,得到datetime.timedelta对象 ) # zhDateTime和datetime.timedelta相加,得到zhDateTime对象 - ( DateTime.now().to_lunar() - zhDateTime(2023,2,False,1) # 两个zhDateTime类相减,得到datetime.timedelta对象 ) # zhDateTime和datetime.timedelta相减,得到zhDateTime对象 )
"农历 2023年3月22日 0时4刻0分0秒0"
汉字数字表示法
-
对整数进行汉字分组
-
分离各个单位,不进行其他处理
from zhDateTime import int_group int_group(1010045760500200000000026410400044640400000002)
输出应为
[10, '载', 1004, '正', 5760, '涧', 5002, '沟', 0, '穰', 0, '秭', 264, '垓', 1040, '京', 44, '兆', 6404, ' 亿', 0, '万', 2]
-
分离单位的同时,包括分组时中间读出的“零”
from zhDateTime import int_group_seperated int_group_seperated(1010045760500200000000026410400044640400000002)
应为
[10, '载', 1004, '正', 5760, '涧', 5002, '沟', '零', 264, '垓', 1040, '京', '零', 44, '兆', 6404, '亿', ' 零', 2]
-
输出分离后的字符串,包括分组时中间读出的“零”(符合《中华人民共和国国家标准 GB/T 15835-2011〈出版物上数字用法的规定〉》中
5.3 阿拉伯数字与汉字数字同时使用
大数的用法,但是增加了兆、京等古代计数单位)from zhDateTime import int_2_grouped_han_str int_2_grouped_han_str(1010045760500200000000026410400044640400000002)
应为
"10载1004正5760涧5002沟零264垓1040京零44兆6404亿零2"
-
-
对整数进行汉字化输出
- 万以内(不含万)的整数
应为from zhDateTime import lkint_hanzify lkint_hanzify(1534) lkint_hanzify(1020) lkint_hanzify(29)
"一千五百三十四" "一千零二十" "廿九"
- 大于千(不含千)大整数的汉字化输出
应为from zhDateTime import int_hanzify int_hanzify(1010045760500200000000026410400044640400000002)
"十载一千零四正五千七百六十涧五千零二沟零二百六十四垓一千零四十京零四十四兆六千四百零四亿零二"
- 万以内(不含万)的整数
获取日期相关数据
from zhDateTime import (
shichen_ke_2_hour_minute,
hour_minute_2_shichen_ke,
get_lunar_month_list,
get_lunar_new_year,
verify_lunar_date,
)
shichen_ke_2_hour_minute(5,2) # 从零开始的第5个时辰的第2刻对应的是几小时几分钟?
hour_minute_2_shichen_ke(14,25) # 下午两点25分对应的是第几时辰第几刻?
get_lunar_month_list(2024) # 公历2024年的农历月份是如何排布的?
get_lunar_new_year(2023) # 公历2023年的农历春节当日是在公历几月几日?
verify_lunar_date(2023,5,True,1) # 农历 2023 年 闰 5 月 1 日是不是一个可供使用的农历日期?
上述代码的输出应为这样的
(9, 30)
(7, 5)
([29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29], 0) # 其中 0 表示闰月在 0 月,即没有闰月
(1, 22)
(False, [29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30], 2) # False 表示这个日期有误,中间的列表是这一年的农历每月之日期,最后的2是这一年的闰月是二月
以上就是本文的全部内容啦!
如果有能力的话,不妨来zhDateTime仓库贡献代码并给出你的Star哦~