关于网上阴历/阳历转换的一些分析

网上的阴历阳历转换大多都来自这段代码

有的人说转换的不太准确 比如阳历1996年7月15日转为阴历是1996-06-01, 但是阴历1996-05-30转为阳历是1996年7月15.

分析一下 应该是 “农历1900-2100的润大小信息表” lunarInfo 找到1996代表的年份数据0x055c0.
但是 0x55c0 到底代表什么呢? 貌似作者也没写 我们来猜一下.
转为2进制 0x055c0 => 0x55c0 => 0101 0101 1100 0000
根据二进制猜一下 左12位代表 12个月份, 0代表小月29天,1代表大约30天. 找个日历看看1996日历
发现 5,6,7,8月份天数不对, 正确的大小月二进制应该是 0101 1010 1100, 后4bit我们还保留后面再讨论.
那1996对应的正确数据应该是0101 1010 1100 0000 => 0x05ac0.

我们知道了中间12bit的含义 那前4位和后4位分别代表什么呢?

我们再来找个有代表性的年份 2017 他对应的数据是:
0x15176 => 0001 0101 0001 0111 0110

分析日历发现2017年阴历闰6月大, 也就是说2017阴历有两个6月,并且第二个6月是大月30天.
那我们再来结合数据0x15176的二进制猜一下

                   0001      0101 0001 0111     0110
                    ↓              ↓             ↓
闰月大,第二个闰月是30天  2,4,8,10,11,12大月30天 闰6月(两个6月)

这样再有天数不准确的我们就可以试着自己对比一下数据,修改一下了.
… 今天太晚了 我们就先分析到这里吧… 下班闪人