Python農(nóng)歷庫zhdate 及200年農(nóng)歷數(shù)據(jù)壓縮存儲方法

zhdate支持農(nóng)歷-公歷互相轉(zhuǎn)換、日期加減以及全中文日期生成,內(nèi)置了1900-2100年的農(nóng)歷數(shù)據(jù),僅依賴Python內(nèi)置模塊。該庫保存農(nóng)歷數(shù)據(jù)的方法很巧妙,我當(dāng)初看源碼時(shí)就留下了非常深刻的印象。
[農(nóng)歷庫為什么使用查表法而不是計(jì)算]
農(nóng)歷是由天文觀測確定的歷法,并非數(shù)學(xué)周期。以月亮圓缺循環(huán)算做一個(gè)月,一輪是29天12時(shí)44分3秒。于是農(nóng)歷把月份分成大月30天和小月29天,但是這導(dǎo)致了一年是354天,所以又添加了閏月。根據(jù)我國當(dāng)前的農(nóng)歷執(zhí)行標(biāo)準(zhǔn),新月的判定以太陽、地球、月亮在地球軌道的夾角180°為據(jù)。各種農(nóng)歷算法本質(zhì)上是計(jì)算日月運(yùn)行軌跡,并且其中很多都不精確。

所以簡單做法是直接保存農(nóng)歷數(shù)據(jù),與公歷(陽歷)對應(yīng)查詢。
查表法:將一些事先計(jì)算好的結(jié)果,存儲在數(shù)據(jù)中,需要時(shí)直接查取,節(jié)省計(jì)算開銷。
[zhdate農(nóng)歷庫的使用]
zhdate庫內(nèi)置了200年的農(nóng)歷數(shù)據(jù),并且數(shù)據(jù)存儲方法非常精妙。
[安裝]
pip install zhdate
項(xiàng)目網(wǎng)址
github.com/CutePandaSh/zhdate
[各種例子]

[二百年農(nóng)歷數(shù)據(jù)的存儲方法]
農(nóng)歷年份需要保存的數(shù)據(jù)?
1. 閏月的月份
2. 閏月是30天還是29天
3. 每個(gè)月是30天還是29天
閏月的月份用整數(shù)就能保存;閏月的天數(shù),0/1就可以保存(29或30);每月的天數(shù),保存方法跟閏月相同
以2020年為例:
2020年,閏4月29天。
正月 至 臘月? (0表示29天,1表示30天)
0111 1001 0101

轉(zhuǎn)換之后,200年農(nóng)歷數(shù)據(jù),就是個(gè)整數(shù)列表
之后只要再記錄任意一年的春節(jié)日期,就可算出200年的公歷對應(yīng)。作者為了減少計(jì)算量,直接保存了每年的春節(jié)日期。
