[视频] Python农历库zhdate,以及200年农历数据压缩存储方法

  zhdate支持农历-公历互相转换、日期加减以及全中文日期生成,内置了1900-2100年的农历数据,仅依赖Python内置模块。该库保存农历数据的方法很巧妙,我当初看源码时就留下了非常深刻的印象。

[农历库为什么使用查表法而不是计算]

  农历是由天文观测确定的历法,并非数学周期。以月亮圆缺循环算做一个月,一轮是29天12时44分3秒。于是农历把月份分成大月30天和小月29天,但是这导致了一年是354天,所以又添加了闰月。根据我国当前的农历执行标准,新月的判定以太阳、地球、月亮在地球轨道的夹角180°为据。各种农历算法本质上是计算日月运行轨迹,并且其中很多都不精确。

30e32e9e713811b96aabb78c194089e4.png

  所以简单做法是直接保存农历数据,与公历(阳历)对应查询。

查表法:将一些事先计算好的结果,存储在数据中,需要时直接查取,节省计算开销。

[zhdate农历库的使用]

zhdate库内置了200年的农历数据,并且数据存储方法非常精妙。

[安装]

pip install zhdate

项目网址

github.com/CutePandaSh/zhdate

[各种例子]

abf24d85a9de124421268e0d83cfcba4.png

逐步演示例子请看视频

[二百年农历数据的存储方法]

农历年份需要保存的数据❓

1. 闰月的月份

2. 闰月是30天还是29天

3. 每个月是30天还是29天

闰月的月份用整数就能保存;闰月的天数,0/1就可以保存(29或30);每月的天数,保存方法跟闰月相同

以2020年为例:

2020年,闰4月29天。

正月 至 腊月 (0表示29天,1表示30天)

0111 1001 0101

929c6e9dce0b38272d0c4ab70f78b61f.png

转换之后,200年农历数据,就是个整数列表

b77b91a0eb43fd48a7224ec926264ca6.png

之后只要再记录任意一年的春节日期,就可算出200年的公历对应。作者为了减少计算量,直接保存了每年的春节日期

【视频】Python农历库zhdate,以及200年农历数据压缩存储方法

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐