原创

解决网上通传的2033年农历润月为7月的错误

开篇

农历的介绍不多说了,但是一直不是很了解,农历的日子是怎么算的。就很好奇,在某网站上看到算法,然后在研究的过程中,不经意见发现2033年的闰月错误。这里修改下。

很多地方都有引用那段js代码【万年历js】,网上还有很多人都引用了这个js,怕是因为2033年还没到,所以都没发现吧。【错误1 错误2

wangnianlidecuowu.jpg

解决方案

其实改动很简单。

将2033年大小月代码的字典0x04bd7改为0x04bdb即可。

##简单分析

前提,我们确定了2033年的润月不是7月,而是11月。

知识点:在js或者java代码中0x开头的数字,代表了16进制的数字。

通过16进制转换为二进制,可以得到一年中的所有大小月标记点,以及润月标记点。

看下图

nonglizidian.jpg

以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.算法系列之二十:计算中国农历(二)

温馨提示:
本文最后更新于 2020年07月16日,已超过 927 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
该篇文章的评论功能已被站长关闭
本文目录