如何将朱利安的代码更改为公历并返回

How can I change the code for the julian to gregorian and back?

本文关键字:返回 朱利安 代码      更新时间:2023-10-16

我有这两个函数,但我无法获得从儒略历转换为公历的正确结果。问题是,如果一年可以被 4000 整除,它会给我一个不正确的结果,因为它应该是闰年,但根据要求它不是。所以我尝试添加条件,但它不是 100%。谢谢。

 int gregorian_to_julian(int year, int month, int day)const {
    int result=0;
    int cnt=0;//**added by me 
    if(year>=4000)//**added by me 
        cnt=year/4000;//**added by me 
    int a = (14 - month) / 12;
    int m = month + 12 * a -3;
    int y = year + 4800 -a;
    result = day + ((153 * m + 2) /5) + (365 * y) + (y/4) - (y/100) + (y/400) - 32045;
    result-=cnt;
    return result;
}
int julian_to_gregorian(int sequence, int &year, int &month, int &day)const {
    int result = 1;
    int cnt=0;
    int a = sequence + 32044;
    int b = (4 * a +3) / 146097;
    int c = a - (146097 * b) / 4;
    int d = (4 * c +3) / 1461;
    int e = c - (1461 * d) /4;
    int m = (5*e +2) / 153;
    day   =  e - ((153 *m +2) /5) +1;
    month =  m + 3 -12 * (m/10);
    year  =  100 *b + d - 4800 + (m/10);
    if(year>=4000)//**added by me
        cnt=year/4000;//**added by me
    day+=cnt;//**added by me
    return result;
}

规则是这样的:

_leap=false;
if (year%  4==0) _leap=true;
if (year%100==0) _leap=false;
if (year%400==0) _leap=true;
// here _leap holds true if it is a leap year