我试图使用我写的两个函数
从朱利安日期获取日期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。请你能帮帮我吗?
非常感谢