解决网上通传的2033年农历润月为7月的错误
开篇
农历的介绍不多说了,但是一直不是很了解,农历的日子是怎么算的。就很好奇,在某网站上看到算法,然后在研究的过程中,不经意见发现2033年的闰月错误。这里修改下。
很多地方都有引用那段js代码【万年历js】,网上还有很多人都引用了这个js,怕是因为2033年还没到,所以都没发现吧。【错误1 错误2】
解决方案
其实改动很简单。
将2033年大小月代码的字典0x04bd7
改为0x04bdb
即可。
##简单分析
前提,我们确定了2033年的润月不是7月,而是11月。
知识点:在js或者java代码中0x
开头的数字,代表了16进制的数字。
通过16进制转换为二进制,可以得到一年中的所有大小月标记点,以及润月标记点。
看下图
以2033年为例(百度的应该不会错误,可以参考百度的农历表来做比对,2033年错误,所以用来说明)
2033年的代码为0x04bdb
,转换为二进制为[100 1011 1101 1011
],但是我们通过转换工具将[04bdb
]转为二进制的时候,最开头的0不会出来,为了理解方便,这里应该补上为[0000 0100 1011 1101 1011
]。多补4个0是因为有些字典是有1开头的,这个开头代表了要润的月是大月还是小月。1为润大月。
具体分析
第一位到第四位代表了要润的月是大月还是小月。为0000
的话代表要润的月是小月。
第五位是0,0代表是小月,为农历一月份
第六位是1,代表大月,为农历二月份。
以此类推,一直到最后一个月为1,代表农历的腊月(十二月,这种说法是错误的,农历没有十二月的说法)。
最后4位是1011
,转成十进制,代表11月。为润月。
知道这个原理反观原先的错误的字典0x04bd7
,转为二进制后为[0000 010010111101 0111
]。
前面十六位都是对的,最后4位,转换为十进制后为7,所以是润七月。是错误的。
总结
网上这种做法虽然比较方便快捷,不需要太多运算量,(基本都只有200年,有的是150年,到2049年)但是没有农历的计算方式,属于字典表型,其实是不提倡的,农历的算法比较复杂,需要一定的天文常识,但不能因为比较复杂就不做研究,几十年后难道我们要丢掉农历吗? 本篇解决的是2033年农历润月为7月的问题,但其实这是我在学习农历算法路上发现的一个问题,农历算法实在复杂,看来不是一次两次能够了解清楚的。可见参考6,大佬的介绍。
参考: 1.网上的万年历,可以直接查看源文件,看代码(js) 2.百度农历,理论上会准确很多,以此为判断条件 3.百度知道中关于2033年润几月的解答 4.进制转换工具 5.香港天文台公历农历对照表,权威 6.算法系列之二十:计算中国农历(二)
本文来自:解决网上通传的2033年农历润月为7月的错误-小码农,转载请保留本条链接,感谢!
- 本文标签: debug 农历
- 本文链接: https://djc8.cn/archives/to-solve-the-online-communication-error-that-the-lunar-month-of-2033-is-july.html
- 版权声明: 本文由小码农原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权