long day; TOD tod;
}MJULIANDAY;//新儒略日
typedef MJULIANDAY *PMJIANDAY; typedef struct tagTOW {
long sn;//秒整数部分 double tos;//秒小数部分
}TOW;
typedef TOW *PTOW; typedef struct tagGPSTIME {
int wn; //周数
TOW tow;//一周内的秒数
}GPSTIME;//GPS时
typedef GPSTIME *PGPSTIME; typedef struct tagDOY {
unsigned short year; unsigned short day; TOD tod;
}DOY;//年积日 typedef DOY *PDOY; double FRAC(double morigin) { }
void CommonTimeToJulianDay(PCOMMONTIME pct,PJULIANDAY pjd) //通用时到儒略日的转换
{
return morigin-long(morigin);// 取小数部分
if(pct->year<1900)
{ }
double ut=pct->hour + pct->minute/60.0 + pct->second/3600.0; if(pct->month<=2) { }
pjd->day=int(365.25*pct->year)+int(30.6001*(pct->month+1))+pct->day+in
pct->year-=1; pct->month+=12; if(pct->year<80) pct->year+=2000; else pct->year+=1900;
t(ut/24+1720981.5);
pjd->tod.sn=
((pct->hour+12)$)*3600+pct->minute*60+(int)pct->second;//秒的整数部分
}
void JulianDayToCommonTime(PJULIANDAY pjd,PCOMMONTIME pct)//儒略日到通用时的转换
{
pjd->tod.tos=pct->second-(int)pct->second;//秒的小数部分
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)$; pct->minute=(pjd->tod.sn600)/60; pct->second=pjd->tod.sn`+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);
}
void GPSTimeToJulianDay(PGPSTIME pgt,PJULIANDAY pjd)//GPS时到儒略日的转换
{ }
void CommonTimeToGPSTime(PCOMMONTIME pct,PGPSTIME pgt)//通用时到GPS时的转换
{
PJULIANDAY pjd=new JULIANDAY; CommonTimeToJulianDay(pct,pjd);
pjd->day=int(pgt->wn*7+double(pgt->tow.sn)/86400.0+2444244.5); pjd->tod.sn=(pgt->tow.sn+43200)?400; pjd->tod.tos=pgt->tow.tos; pgt->tow.tos=pjd->tod.tos;
JulianDayToGPSTime(pjd,pgt); }
void GPSTimeToCommonTime(PGPSTIME pgt,PCOMMONTIME pct)//GPS时到通用时的转换
{ }
void CommonTimeToDOY (PCOMMONTIME pct, PDOY pdoy) {
PJULIANDAY pjd=new JULIANDAY; GPSTimeToJulianDay(pgt,pjd); JulianDayToCommonTime(pjd,pct);
PCOMMONTIME pcto=new COMMONTIME; pcto->year=pct->year; pcto->month=1; pcto->day=1; pcto->hour=0; pcto->minute=0; pcto->second=0;
PJULIANDAY pjdo=new JULIANDAY;
double JD,JDO;
CommonTimeToJulianDay(pcto,pjdo);
JDO=pjdo->day+(pjdo->tod.sn+pjdo->tod.tos)/86400;
PJULIANDAY pjd=new 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->second-int(pct->second); /*pct->hour*3600 }
void DOYToCommonTime (PDOY pdoy, PCOMMONTIME pct) {
PCOMMONTIME pcto=new COMMONTIME; pcto->year=pdoy->year; pcto->month=1; pcto->day=1; pcto->hour=0; pcto->minute=0; pcto->second=0;
PJULIANDAY pjdo=new JULIANDAY;
+pct->minute*60+pct->second-pdoy->tod.sn;*/
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);