C++ 打表法计算农历错误数据处理

网上关于农历计算有几种方法,其中一种方法叫打表法(好象是)。我采用的就是这种方法取的农历,但使用过程中发现其中的很多农历数据是错的。跟实际的农历根本对不上,对原码研究了两天,终于知道错误的原因了。问题就出在“表”里面。具体原理我在另两篇博文里有说明和原码。

https://blog.csdn.net/kim5659/article/details/113806160(二进制取位操作。(愚蠢的人:书到用时方恨少)

https://blog.csdn.net/kim5659/article/details/113802774(一个疑问:关于与的计算的迷惑。

下面就看如何纠正错误:

1、原数据解析(拿2021年数据举例):

红框内为原16进制数解析后到到的13个月大小月情况。和实际情况对比图如下:

上图中红框内这实际2021年的大小月情况,没有闰月13月数据不用管。可以看出有6个月数据是不对的。下面要根据实际情况重新计算,如下图:

红字即为新的16进制数。放回代码内,经验证数据正确,也就是说原代码的农历计算方法是没问题的,但这个“表”有问题导致农历计算不对。这个代码我查了一下,最早出现是07年,但我一下07年的数据也是不对的。所以具体出错原因就不知道了。

我重新按照中华万年历重新把21年到30年的“表”重新核对了一遍,全都是错的,我做了更改,其他年份没改,这是个耗时间的活,一下午也就改10年。我用excel写了公式还方便一点,但也要一个个对,还要一个个验证,保证正确。有空再把其他的改了。

但也有一个疑问:现在的农历算法是不是一定正确,也就是说现在计算的结果,十几二十年后是不是还是正确的,这个我还真不知道。

整个流程是这样的:

21-30年修改后数据如下:

     0x02AB4C,0x055AC1,0x2AD936,0x03694A,0x6752BD,
     0x0392D1,0x0325C6,0x564BBA,0x0655CD,0x02AD43, //2021-2030

原代码中还有一个问题,就是除夕这天农历日期不正确,正常应该农历腊月廿九或农历腊月三十,但那天计算的结果为1月0日,每一年的除夕都是,原因还不清楚。估计也会很快查清楚,或者找到方法解决。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kim5659

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值