将朱利安转换为日期c ++

时间:2014-02-23 14:13:00

标签: c++ c

我试图使用我写的两个函数

从朱利安日期获取日期
int dayepoch(int amin, int acur,int mcur, int dcur){
    int daycount = 0;
    for(int a=amin;a<acur;a++){
        for(int m=mcur;m<=12;m++){
            for(int d=1;d<=daymo(a,m);d++) daycount ++; 
        }
    }
    for(int m=1;m<mcur-1;m++){
        for(int d=1;d<=daymo(acur,m);d++) daycount ++;
    }   
    for(int d=1;d<=dcur;d++) daycount ++;
    return daycount;    
}

int *dayepochrev(int amin, int e){
    int a = amin;
    int m = 1;
    int d = 1;
    while(dayepoch(amin,a,m,d) <= e) a++;
    a--;
    while(dayepoch(amin,a,m+1,d) <= e) m++;
    m--;
    while(dayepoch(amin,a,m+1,d) <= e) d++; 
    d--;
    int *epochrev = new int[3];
    epochrev[0] = a;
    epochrev[1] = m;
    epochrev[2] = d;

    return epochrev;
    delete[] epochrev;  
}

其中

int daymo(int a, int m){
    int dmmax = 0;
    if((a % 4 == 0 && a % 100 != 0)||(a % 400 == 0) ) {
        if(m==0)dmmax = 0;
        if(m==1)dmmax = 31;
        if(m==2)dmmax = 29;
        if(m==3)dmmax = 31;
        if(m==4)dmmax = 30;
        if(m==5)dmmax = 31;
        if(m==6)dmmax = 30;
        if(m==7)dmmax = 31;
        if(m==8)dmmax = 31;
        if(m==9)dmmax = 30;
        if(m==10)dmmax = 31;
        if(m==11)dmmax = 30;
        if(m==12)dmmax = 31;
    }
    else {
        if(m==0)dmmax = 0;
        if(m==1)dmmax = 31;
        if(m==2)dmmax = 28;
        if(m==3)dmmax = 31;
        if(m==4)dmmax = 30;
        if(m==5)dmmax = 31;
        if(m==6)dmmax = 30;
        if(m==7)dmmax = 31;
        if(m==8)dmmax = 31;
        if(m==9)dmmax = 30;
        if(m==10)dmmax = 31;
        if(m==11)dmmax = 30;
        if(m==12)dmmax = 31;
    }
    return dmmax;
}

如果起始月份为MOSTART = 4且起始年份= 1945且考虑的月数为12,则总天数

EPOCH = 365

(从1945年1月4日到1946年3月31日),我可以使用

int EPOCH = dayepoch(1945,1946,MOSTART,31);

这是一段时间的总天数(自年以来的几天)。

然后我想使用应用于给定时期的序列1-365回到日期

for(int e=1;e<EPOCH+1;e++){
  epochrev = dayepochrev(amin,e);
}

但是我得到的日期是1-1-1945 - &gt; 31-12-1945。请你能帮帮我吗?

非常感谢

0 个答案:

没有答案