这个还是个自娱自乐的工作。
昨天已经通过python已经把1901到2019年的所有数据修正完成,真的很快,不到半个小时就全完成了,所以今天就要校对数据是否准确,本来应该是准确的,但可能由于我输入错误导致错误出现,所以必须验证。
验证方法:
1、先用C++取每个月的5、25日两天,每年取24个数据,计算出农历,保存到文件中,不管闰月,如果有一个月数据有错误肯定影响到其他月份。
2、python也计算每月的5、25日两天的农历,与文件中保存的数据进行比较。有错误输出,无错误不输出。
C++的部分基本在原文件上改就行了,很简单,只是原来输出到屏幕,现在写到文件。
第一步:生成文本文件
第二步:运行python进行核对,两边都输入相同的年份。
输入1902数据正确,输入1903的时候出现错误,因为文本保存的是1902年的数据。
这样基本很快能就核对完成了。
贴一下python的原码:
#!/usr/bin/python
# -*- coding:utf-8 -*-
from borax.calendars.lunardate import LunarDate
while (True):
f=open('e:\\aaa123.txt','r') #打开用C++生成的文件
Nf=input("请输入年份:") #输入16位数据所属年份
#Ddate=[5,25]
for i in range(1,13):
LunarD=LunarDate.from_solar_date(int(Nf),i,5) #查出每个月5日的农历
if LunarD.strftime('%y%m%d')!=f.readline()[:-1]:#与存储文件中的日期比较
print("数据有错误:",Nf,i,5) #如果不相等则数据有问题
LunarD1=LunarDate.from_solar_date(int(Nf),i,25)
if LunarD1.strftime('%y%m%d')!=f.readline()[:-1]:
print("数据有错误:",Nf,i,25)
f.close() #关闭文件
C++部分:
#include <iostream>
#include <ctime>
#include "lunarday.h"
#include<fstream>
int main(int argc, char *argv[])
{
using namespace std;
using namespace lunar;
int year;
int month;
int day;
ofstream outfile;
outfile.open("e:\\aaa123.txt");
while (true){
cout << "请输入年份:";
cin >> year;
int my_array[2] = { 5,25 };
for (int month = 1; month < 13; month++) {
for (int &day : my_array) {
Date lunar_date = LuanrDate(year, month, day);
//cout << "输入的日期为:" << endl;
//cout<<month << "月" << day << "日" << endl;
if (lunar_date.day == 0) { //判断这天的日期是否为0,错误的农历日期为0.
//cout << endl;
//cout << "调整后除夕日期:" << endl;
cout << lunar_date.year << "年";
outfile << lunar_date.year;
cout << "12月"; //因为就是除夕不对,所在这天一定是农历12月。
outfile << "12";
day = day - 1; //日期减一天。
Date lunar_date = LuanrDate(year, month, day);//重新计算前一天的农历,必须重新计算。
cout << lunar_date.day + 1 << "日" << endl; //计算前一天农历日期后加1得到正确的除夕农历日期。
outfile << lunar_date.day + 1 << endl;
//outfile.close();
}
else { //不是除夕的日期是正确的正常计算。
cout << lunar_date.year;
outfile << lunar_date.year;
//if (lunar_date.leap)
// cout << "闰";
cout << lunar_date.month ;
outfile << lunar_date.month;
cout << lunar_date.day << endl;
outfile << lunar_date.day << endl;
//cout << endl;
}
}
}
outfile.close();
return 0;
}
}
有个小遗憾,Python可以实现循环,基本只要输入年份就可以了,但C++没成功,每次都要重新编译。应该也可以解决,只是现在不想研究了。