在学习GNSS过程中,不管是数据下载又或是不同文件名中时间的匹配,经常需要在不同时间间转换,笔者在此归纳了几种经常会遇到的时间转换:
1、年月日转年积日 3、年积日转简化儒略日 5、简化儒略日转GPS周
2、年积日转年月日 4、简化儒略日转年积日 6、GPS周转简化儒略日
笔者在此同时分享一个小软件,用于帮助大家检验通过代码转换的结果:
链接:https://pan.baidu.com/s/19jdWG1t1f4saJZGP0CFqFg 提取码:zhao
通过C++具体实现代码如下:
1、年月日转年积日
//年月日转为年积日
void ymd2yd(const int year,const int month,const int day )
{
int doy=0;
int days_in_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if (year%4==0 && (year%100!=0 || year%400==0))
{
days_in_month[1]=29;
}
for (int i = 0; i < month-1; i++)
{
doy=doy+days_in_month[i];
}
doy=doy+day;
cout <<"年:"<<year<<"\t月"<<month<<"\t日"<<day<<endl;
cout <<"年:"<<year<<"\t年积日:"<<doy<<endl;
}
2、年积日转年月日
//年积日转为年月日
void yd2ymd(int year,int doy)
{
int days_in_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if (year%4==0 && (year%100!=0 || year%400==0))
{
days_in_month[1]=29;
}
int id=doy;
int month=0;
int day=0;
for(int i=0;i<12;i++)
{
id=id-days_in_month[i];
month=i+1;
if (id>0)
{
continue;
}
day=id+days_in_month[i];
break;
}
cout <<"年:"<<year<<"\t年积日:"<<doy<<endl;
cout <<"年:"<<year<<"\t月"<<month<<"\t日"<<day<<endl;
}
3、年积日转简化儒略日
//年积日转化为简化儒略日
void yd2mjd(const int year ,const int doy)
{
int mjd52=34012;
int yr=year;
if (year <1900)
{
if (year > 60)
{
yr=yr+1900;
}
else
{
yr=yr+2000;
}
}
yr=yr-1900;
int nyear=yr-52;
int leap=(nyear+3)/4;
int nday=nyear*365;
int mjd=(mjd52-1)+nday+leap+doy;
cout<<"年:"<<year<<"\t年积日:"<<doy<<endl;
cout<<"简化儒略日:"<<mjd<<endl;
}
4、简化儒略日转年积日
//简化儒略日转为年积日
void mjd2yd(const int mjd)
{
int days[4]={366,365,365,365};
int mjd52=34012;
int doy=mjd+1-mjd52;
int i=1;
int year=52;
while(doy >days[i-1])
{
doy=doy-days[i-1];
year=year+1;
i=year%4+1;
}
if (year<1900)
{
if (year>60)
{
year=year+1900;
}
else
{
year=year+2000;
}
}
cout<<"简化儒略日:"<<mjd<<endl;
cout<<"年:"<<year<<"\t年积日:"<<doy<<endl;
}
5、简化儒略日转GPS周
//简化儒略日转为GPS周
void mjd2gpsweek(const int mjd)
{
int week=(mjd-44244)/7;
int weekd=mjd-44244-week*7;
cout<<"简化儒略日:"<<mjd<<endl;
cout<<"GPS周:"<<week<<"\t第 "<<weekd<<" 天"<<endl;
}
6、GPS周转简化儒略日
//GPS周转为简化儒略日
void gpsweek2mjd(const int week,const int weekd)
{
int mjd=week*7+44244+weekd;
cout<<"GPS周:"<<week<<"\t第 "<<weekd<<" 天"<<endl;
cout<<"简化儒略日:"<<mjd<<endl;
}