欢迎光临散文网 会员登陆 & 注册

Python农历库zhdate 及200年农历数据压缩存储方法

2020-11-26 15:02 作者:象喻  | 我要投稿


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


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

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

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

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

[zhdate农历库的使用]

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

[安装]
pip install zhdate

项目网址
github.com/CutePandaSh/zhdate

[各种例子]


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

农历年份需要保存的数据❓
1. 闰月的月份
2. 闰月是30天还是29天
3. 每个月是30天还是29天

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

以2020年为例:
2020年,闰4月29天。
正月 至 腊月  (0表示29天,1表示30天)
0111 1001 0101



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


Python农历库zhdate 及200年农历数据压缩存储方法的评论 (共 条)

分享到微博请遵守国家法律