打表法计算农历错误数据处理之除夕修正

这几天犯懒,没有心思研究原代码,农历除夕总显示“1月0日“这事又让人讨厌,所以今天采取了个权宜之计,”让“它显示正确除夕。其实也很简单,就是不改变原计算结果,只是让显示正确,因为只有除夕农历不对,所以还是很好改的,加一个判断就行了。

修改的代码如下:

cout <<"计算的除夕农历月份:"<< lunar_date.month << endl;
cout <<"计算的除夕农历日期:"<< lunar_date.day << endl;
if (lunar_date.day == 0) {  //判断这天的日期是否为0,错误的农历日期为0.
    cout << endl;
    cout << "调整后除夕日期:" << endl;
    cout << lunar_date.year << "年";			
    cout << "12月";         //因为就是除夕不对,所在这天一定是农历12月。
    day = day - 1;          //日期减一天。
    Date lunar_date = LuanrDate(year, month, day);//重新计算前一天的农历,必须重新计算。
    cout << lunar_date.day+1  << "日" << endl;  //计算前一天农历日期后加1得到正确的除夕农历日期。
    }
else {                     //不是除夕的日期是正确的正常计算。
    cout << lunar_date.year << "年";
    if (lunar_date.leap)
    cout << "闰";
    cout << lunar_date.month << "月";
    cout << lunar_date.day  << "日" << endl;
			
    }

修正后如下图:

其实原理也很简单就是如果计算出当天的农历日期为0的话,月份显示12月,计算出前一天的农历日期,并加1得到除夕那天的日期,29或者30.

这里面有一个坑,就是day=day-1,必须要重新计算农历日期,不然lunar_date.day依然是0.

男,打表法计算农历的”表“已经校对了50年,20-70年,1901-2099一共是200年,我想还是花点时间把它校对完吧,总有人会用得到。

猜你喜欢

转载自blog.csdn.net/kim5659/article/details/113828194