||
最近在做GRACE的时间序列分析时,需要按年为单位进行,但是CSR、GRGS、GFZ和JPL等机构提供的数据时间都是年月日,需要大量转换,用着实在不方便,就自己写了一个计算年积日的程序,和大家分享一下:
//计算年积日
double Doy(double time)
{
//time的格式20020405
int year=(int)(time/10000);
int month=(int)((time-year*10000)/100);
int day =(int)(time-year*10000-month*100);
int sum=0,leap,totalday=365;;
switch(month) /*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2) /*如果是闰年且月份大于2,总天数应该加一天*/
{
sum++;totalday=366;
}
double doy=double(sum)/double(totalday);
return doy+year;
}
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-21 21:17
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社