年月日、年积日、简化儒略日、GPS周之间相互转换(C++)

5 篇文章 1 订阅
这篇博客介绍了在GNSS学习中常用的时间转换方法,包括年月日转年积日、年积日转年月日、年积日转简化儒略日、简化儒略日转年积日、简化儒略日转GPS周以及GPS周转简化儒略日的C++实现代码。此外,还提供了一个小软件的链接以供检验转换结果的准确性。
摘要由CSDN通过智能技术生成

        在学习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;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值