📄 timetran.cpp
字号:
#include "TimeTran.h"
//#include <math.h>
//1. 由通用时到儒略日
void CommonTimeToJulianDay (PCOMMONTIME pct, //指向通用时的指针;
PJULIANDAY pjd) //指向儒略日的指针
{
int year,month;
if (pct->month<=2) {
year = pct->year-1;
month = pct->month+12;
}
else {
year = pct->year;
month = pct->month;
}
pjd->day = long (long (365.25*year) + long (30.6001 * (month+1))
+ pct->day + pct->hour / 12 * 0.5 + 1720981.5);
pjd->tod.sn = long ((pct->hour+12) % 24 * 3600 + pct->minute * 60
+ pct->second);
pjd->tod.tos= pct->second - long (pct->second);
}
//2. 儒略日到通用时
void JulianDayToCommonTime (PJULIANDAY pjd, //指向儒略日的指针;
PCOMMONTIME pct) //指向通用时的指针。
{
long a,b,c,d,e;
a = long (pjd->day + (pjd->tod.sn + pjd->tod.tos) / (3600*24) + 0.5);
b = a + 1537;
c = long ((b-122.1) / 365.25);
d = long (365.25 * c);
e = long ((b-d) / 30.6001);
pct->second = pjd->tod.sn % 60 + pjd->tod.tos;
pct->minute = pjd->tod.sn % 3600/ 60;
pct->hour = (pjd->tod.sn + 12 * 3600) / 3600 % 24;
pct->day = (unsigned char) (b - d - long (30.6001 * e));
pct->month = (unsigned char) (e - 1 - 12 * (e/14));
pct->year = c - 4715 - (7 + pct->month) / 10;
}
//3. GPS时到儒略日
void GPSTimeToJulianDay (PGPSTIME pgt, //指向GPS时的指针;
PJULIANDAY pjd) //指向儒略日的指针。
{
pjd->day = long (pgt->wn*7 + pgt->tow.sn / (24*3600.0) + 2444244.5);
pjd->tod.sn = long (pgt->tow.sn + 12*3600) % 86400;
pjd->tod.tos= pgt->tow.tos;
}
//4. 儒略日到GPS时
void JulianDayToGPSTime (PJULIANDAY pjd, //指向儒略日的指针;
PGPSTIME pgt) //指向GPS时的指针。
{
pgt->wn = int (pjd->day + pjd->tod.sn / (24*3600.0) - 2444244.5) / 7;
pgt->tow.sn = (pjd->day - 2444244 - 7 * pgt->wn) * 86400
- 43200 + pjd->tod.sn;
pgt->tow.tos= pjd->tod.tos;
}
//5. 通用时到GPS时
void CommonTimeToGPSTime (PCOMMONTIME pct, //指向通用时的指针
PGPSTIME pgt) //指向GPS时的指针。
{
JULIANDAY jd;
CommonTimeToJulianDay (pct, &jd);
JulianDayToGPSTime (&jd, pgt);
}
//6. GPS时到通用时
void GPSTimeToCommonTime (PGPSTIME pgt, //指向GPS时的指针;
PCOMMONTIME pct) //指向通用时的指针。
{
JULIANDAY jd;
GPSTimeToJulianDay (pgt, &jd);
JulianDayToCommonTime (&jd, pct);
}
//对时间进行调整
void SetTimeDelta (PJULIANDAY pjdNew, //指向计算所得的儒略日的指针
PJULIANDAY pjdOld, //指向原始的儒略日的指针
double dDelta) //时间差(second)(-1<dDelta<1)
{
if (fabs(dDelta) < 10e-8) {
memcpy(pjdNew, pjdOld, sizeof (JULIANDAY));
return ;
}
else {
pjdNew->tod.tos = pjdOld->tod.tos + dDelta;
pjdNew->tod.sn = pjdOld->tod.sn + (long)floor(pjdNew->tod.tos);
pjdNew->tod.tos = pjdNew->tod.tos - floor(pjdNew->tod.tos);
pjdNew->day = pjdOld->day;
if (pjdNew->tod.sn < 0) {
pjdNew->day = pjdOld->day - 1;
pjdNew->tod.sn = pjdOld->tod.sn + 86400;
}
else if (pjdNew->tod.sn >= 86400) {
pjdNew->day = pjdOld->day + 1;
pjdNew->tod.sn = pjdOld->tod.sn - 86400;
}
}
}
//计算时间差
double SubtractTime (PJULIANDAY pjdMinuend, //指向被减数的儒略日的指针
PJULIANDAY pjdSubtrahend) //指向减数的儒略日的指针
{
return (pjdMinuend->day - pjdSubtrahend->day) * 86400
+ (pjdMinuend->tod.sn - pjdSubtrahend->tod.sn)
+ (pjdMinuend->tod.tos - pjdSubtrahend->tod.tos);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -