⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.cpp

📁 读取GPS的Rinex观测文件
💻 CPP
字号:
#include "time.h" 
double FRAC(double morigin)
{
	return morigin-long(morigin);// 取小数部分

}
void CommonTimeToJulianDay(PCOMMONTIME pct,PJULIANDAY pjd) //通用时到儒略日的转换
{
    if(pct->year<1900)
	{
		if(pct->year<80)
		pct->year+=2000;
		else pct->year+=1900;
	}
	double ut=pct->hour + pct->minute/60.0 + pct->second/3600.0;
	if(pct->month<=2)
	{
		pct->year-=1;
		pct->month+=12;
	}
	pjd->day=int(365.25*pct->year)+int(30.6001*(pct->month+1))+pct->day+int(ut/24+1720981.5);
	pjd->tod.sn= ((pct->hour+12)%24)*3600+pct->minute*60+(int)pct->second;//秒的整数部分
	pjd->tod.tos=pct->second-(int)pct->second;//秒的小数部分
} 
void JulianDayToCommonTime(PJULIANDAY pjd,PCOMMONTIME pct)//儒略日到通用时的转换
{
	double x=pjd->day+(pjd->tod.sn+pjd->tod.tos)/(60.0*60.0*24);
	int a=int(x+0.5);
	int b=a+1537;
	int c=int((b-122.1)/365.25);
	int d=int(365.25*c);
	int e=int((b-d)/30.6001);
	pct->day=b-d-int(30.6001*e);
	pct->month=e-1-12*int(e/14);
	pct->year=c-4715-int((7+pct->month)/10);
	pct->hour=(pjd->tod.sn/3600+12)%24;
	pct->minute=(pjd->tod.sn%3600)/60;
	pct->second=pjd->tod.sn%60+pjd->tod.tos;
	int N=a%7; 
}

void JulianDayToGPSTime(PJULIANDAY pjd,PGPSTIME pgt)//儒略日到GPS时的转换
{
	double x=pjd->day+(pjd->tod.sn+pjd->tod.tos)/(60.0*60.0*24);
	pgt->wn=int((x-2444244.5)/7);
	pgt->tow.sn=int(((pjd->day-2444244)%7+(pjd->tod.sn/(60.0*60.0*24)-0.5))*86400);
	pgt->tow.tos=pjd->tod.tos;
}

void GPSTimeToJulianDay(PGPSTIME pgt,PJULIANDAY pjd)//GPS时到儒略日的转换
{
	pjd->day=int(pgt->wn*7+double(pgt->tow.sn)/86400.0+2444244.5);
	pjd->tod.sn=(pgt->tow.sn+43200)%86400;
	pjd->tod.tos=pgt->tow.tos;
}
void CommonTimeToGPSTime(PCOMMONTIME pct,PGPSTIME pgt)//通用时到GPS时的转换
{
	PJULIANDAY pjd=new JULIANDAY;
	CommonTimeToJulianDay(pct,pjd);
    JulianDayToGPSTime(pjd,pgt);
}
void GPSTimeToCommonTime(PGPSTIME pgt,PCOMMONTIME pct)//GPS时到通用时的转换
{
	PJULIANDAY pjd=new JULIANDAY;
	GPSTimeToJulianDay(pgt,pjd);
	JulianDayToCommonTime(pjd,pct);
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CommonTimeToDOY (PCOMMONTIME pct, PDOY pdoy)
{
	PCOMMONTIME pcto=new COMMONTIME;
//	pcto=(PCOMMONTIME)malloc(sizeof(COMMONTIME));
	pcto->year=pct->year;
	pcto->month=1;
	pcto->day=1;
	pcto->hour=0;
	pcto->minute=0;
	pcto->second=0;

	PJULIANDAY pjdo=new JULIANDAY;
//	pjdo=(PJULIANDAY)malloc(sizeof(JULIANDAY));

	double JD,JDO;
	CommonTimeToJulianDay(pcto,pjdo);
	JDO=pjdo->day+(pjdo->tod.sn+pjdo->tod.tos)/86400;

	PJULIANDAY pjd=new JULIANDAY;
//	pjd=(PJULIANDAY)malloc(sizeof(JULIANDAY));
	CommonTimeToJulianDay(pct,pjd);

	JD=pjd->day+(pjd->tod.sn+pjd->tod.tos)/86400;

	pdoy->day=short(JD-JDO+1);
	pdoy->year=pct->year;

	pdoy->tod.sn=long(pct->hour*3600
		+pct->minute*60+pct->second);
    pdoy->tod.tos=pct->hour*3600
		+pct->minute*60+pct->second-pdoy->tod.sn;
    
}



void DOYToCommonTime (PDOY pdoy, PCOMMONTIME pct)
{
	PCOMMONTIME pcto=new COMMONTIME;
//	pcto=(PCOMMONTIME)malloc(sizeof(COMMONTIME));
	pcto->year=pdoy->year;
	pcto->month=1;
	pcto->day=1;
	pcto->hour=0;
	pcto->minute=0;
	pcto->second=0;

	PJULIANDAY pjdo=new JULIANDAY;
//	pjdo=(PJULIANDAY)malloc(sizeof(JULIANDAY));

    double JD,JDO;
	CommonTimeToJulianDay(pcto,pjdo);
	JDO=pjdo->day+(pjdo->tod.sn+pjdo->tod.tos)/86400;

	JD=JDO+pdoy->day+(pdoy->tod.sn+pdoy->tod.tos)/86400-1;
    
	long a,b,c,d,e;
	
	a=(long)(JD+0.5);
	b=a+1537;
	c=(long)((b-122.1)/365.25);
	d=(long)(365.25*c);
	e=(long)((b-d)/30.6001);
	pct->day=short(b-d-(long)(30.6001*e)+FRAC(JD+0.5));
	pct->month=short(e-1-12*(long)(e/14));
	pct->year=short(c-4715-(long)((7+pct->month)/10));

	pct->hour=short((pdoy->tod.sn+pdoy->tod.tos)/3600);
	pct->minute=short((pdoy->tod.sn+pdoy->tod.tos
		-pct->hour*3600)/60);
	pct->second=pdoy->tod.sn+pdoy->tod.tos
		-pct->hour*3600-pct->minute*60;
}



void GPSTimeToDOY (PGPSTIME pgt, PDOY pdoy)
{
	PJULIANDAY pjd=new JULIANDAY;
//	pjd=(PJULIANDAY)malloc(sizeof(JULIANDAY));

	GPSTimeToJulianDay (pgt, pjd);
    
	PCOMMONTIME pct=new COMMONTIME;
//	pct=(PCOMMONTIME)malloc(sizeof(COMMONTIME));
	JulianDayToCommonTime (pjd,pct);

    CommonTimeToDOY (pct,pdoy);


}




void DOYToGPSTime (PDOY pdoy, PGPSTIME pgt)
{
    PCOMMONTIME pct=new COMMONTIME;
//	pct=(PCOMMONTIME)malloc(sizeof(COMMONTIME));
	DOYToCommonTime (pdoy,pct);

    CommonTimeToGPSTime (pct, pgt);


}




void JulianDayToDOY (PJULIANDAY pjd, PDOY pdoy)
{ 
	PCOMMONTIME pct=new COMMONTIME;
//	pct=(PCOMMONTIME)malloc(sizeof(COMMONTIME));
	JulianDayToCommonTime (pjd, pct);

	CommonTimeToDOY (pct,pdoy);

}



void DOYToJulianDay (PDOY pdoy, PJULIANDAY pjd)
{
	PCOMMONTIME pct=new COMMONTIME;
//	pct=(PCOMMONTIME)malloc(sizeof(COMMONTIME));
	DOYToCommonTime (pdoy,pct);
   
	CommonTimeToJulianDay(pct,pjd);

}



double GetTimeDelta (PJULIANDAY pjd1, PJULIANDAY pjd2)
{

	double JD1,JD2;
	JD1=pjd1->day+(pjd1->tod.sn+pjd1->tod.tos)/86400;
	JD2=pjd2->day+(pjd2->tod.sn+pjd2->tod.tos)/86400;

	return JD1-JD2;
	
}
void SetTimeDelta (PJULIANDAY pjdNew, PJULIANDAY pjdOld, double dDelta)
{
	double JDold,JDnew;
	JDold=pjdOld->day+(pjdOld->tod.sn+pjdOld->tod.tos)/86400;
	JDnew=JDold+dDelta/86400;

	pjdNew->day=long(JDnew);
	pjdNew->tod.sn=long((JDnew-long(JDnew))*86400);
	pjdNew->tod.tos=(JDnew-long(JDnew))*86400
		-long((JDnew-long(JDnew))*86400);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -