60 static const int NPRE=14;
68 { 1960, 1, 1.4178180, 0.0012960 },
69 { 1961, 1, 1.4228180, 0.0012960 },
70 { 1961, 8, 1.3728180, 0.0012960 },
71 { 1962, 1, 1.8458580, 0.0011232 },
72 { 1963, 11, 1.9458580, 0.0011232 },
73 { 1964, 1, 3.2401300, 0.0012960 },
74 { 1964, 4, 3.3401300, 0.0012960 },
75 { 1964, 9, 3.4401300, 0.0012960 },
76 { 1965, 1, 3.5401300, 0.0012960 },
77 { 1965, 3, 3.6401300, 0.0012960 },
78 { 1965, 7, 3.7401300, 0.0012960 },
79 { 1965, 9, 3.8401300, 0.0012960 },
80 { 1966, 1, 4.3131700, 0.0025920 },
81 { 1968, 2, 4.2131700, 0.0025920 }
122 static const int NLEAPS =
sizeof(leaps)/
sizeof(leaps[0]);
134 else if (month < 1 || month > 12)
138 else if (
year < 1972)
141 for (
int i=NPRE-1; i>=0; i--)
152 int iday(
static_cast<int>(
day));
153 double dday(
static_cast<double>(iday-
int(
day)));
161 return (preleap[i].delt + (
double(JD0-JD)+dday)*preleap[i].rate);
166 for (
int i=NLEAPS-1; i>=0; i--)
173 return double(leaps[i].nleap);
194 if (inTS == TimeSystem::Unknown || outTS == TimeSystem::Unknown)
196 Exception e(
"Cannot compute correction for TimeSystem::Unknown");
202 if (inTS == TimeSystem::TDB || outTS == TimeSystem::TDB)
206 double frac(
day-iday);
207 double TJ2000(jday-2451545.5+frac);
209 frac = ::fmod(0.017201969994578 * TJ2000, 6.2831853071796);
210 TDBmTT = 0.0001657 *
::sin(6.240075674 + frac);
212 frac = ::fmod(0.015751909262251 * TJ2000, 6.2831853071796);
213 TDBmTT += 0.000022 *
::sin(4.295429822 + frac);
217 static const double TAI_minus_GPSGAL_EPOCH = 19.;
218 static const double TAI_minus_BDT_EPOCH = 33.;
219 static const double TAI_minus_TT_EPOCH = -32.184;
226 if (inTS == TimeSystem::GPS ||
227 inTS == TimeSystem::GAL ||
228 inTS == TimeSystem::QZS ||
229 inTS == TimeSystem::IRN )
231 dt = TAI_minus_GPSGAL_EPOCH;
233 else if (inTS == TimeSystem::UTC ||
234 inTS == TimeSystem::GLO)
238 else if (inTS == TimeSystem::BDT)
240 dt = TAI_minus_BDT_EPOCH;
242 else if (inTS == TimeSystem::TAI)
245 else if (inTS == TimeSystem::TT)
247 dt = TAI_minus_TT_EPOCH;
249 else if (inTS == TimeSystem::TDB)
251 dt = TAI_minus_TT_EPOCH + TDBmTT;
264 if (outTS == TimeSystem::GPS ||
265 outTS == TimeSystem::GAL ||
266 outTS == TimeSystem::QZS ||
267 outTS == TimeSystem::IRN )
269 dt -= TAI_minus_GPSGAL_EPOCH;
271 else if (outTS == TimeSystem::UTC ||
272 outTS == TimeSystem::GLO)
276 else if (outTS == TimeSystem::BDT)
278 dt -= TAI_minus_BDT_EPOCH;
280 else if (outTS == TimeSystem::TAI)
283 else if (outTS == TimeSystem::TT)
285 dt -= TAI_minus_TT_EPOCH;
287 else if (outTS == TimeSystem::TDB)
289 dt -= TAI_minus_TT_EPOCH + TDBmTT;
301 namespace StringUtils
307 case TimeSystem::Unknown:
return "UNK";
308 case TimeSystem::Any:
return "Any";
309 case TimeSystem::GPS:
return "GPS";
310 case TimeSystem::GLO:
return "GLO";
311 case TimeSystem::GAL:
return "GAL";
312 case TimeSystem::QZS:
return "QZS";
313 case TimeSystem::BDT:
return "BDT";
314 case TimeSystem::IRN:
return "IRN";
315 case TimeSystem::UTC:
return "UTC";
316 case TimeSystem::TAI:
return "TAI";
317 case TimeSystem::TT:
return "TT";
318 case TimeSystem::TDB:
return "TDB";
319 default:
return "???";
326 if (s ==
"UNK")
return TimeSystem::Unknown;
327 if (s ==
"Any")
return TimeSystem::Any;
328 if (s ==
"GPS")
return TimeSystem::GPS;
329 if (s ==
"GLO")
return TimeSystem::GLO;
330 if (s ==
"GAL")
return TimeSystem::GAL;
331 if (s ==
"QZS")
return TimeSystem::QZS;
332 if (s ==
"BDT")
return TimeSystem::BDT;
333 if (s ==
"IRN")
return TimeSystem::IRN;
334 if (s ==
"UTC")
return TimeSystem::UTC;
335 if (s ==
"TAI")
return TimeSystem::TAI;
336 if (s ==
"TT")
return TimeSystem::TT;
337 if (s ==
"TDB")
return TimeSystem::TDB;
338 return TimeSystem::Unknown;