1. 程式人生 > 其它 >打表法計算農曆錯誤資料處理之除夕修正

打表法計算農曆錯誤資料處理之除夕修正

技術標籤:c++農曆除夕

這幾天犯懶,沒有心思研究原始碼,農曆除夕總顯示“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年,我想還是花點時間把它校對完吧,總有人會用得到。