37 bool iTime::p_lpInitialized =
false;
54 iTime::iTime(
const QString &time) {
55 LoadLeapSecondKernel();
59 str2et_c(time.toAscii().data(), &et);
63 UnloadLeapSecondKernel();
77 void iTime::operator=(
const QString &time) {
78 LoadLeapSecondKernel();
82 str2et_c(time.toAscii().data(), &et);
86 UnloadLeapSecondKernel();
90 void iTime::operator=(
const char *time) {
92 LoadLeapSecondKernel();
100 UnloadLeapSecondKernel();
105 void iTime::operator=(
const double time) {
106 LoadLeapSecondKernel();
108 UnloadLeapSecondKernel();
118 bool iTime::operator>=(
const iTime &time) {
119 return (p_et >= time.
p_et);
129 bool iTime::operator<=(
const iTime &time) {
130 return (p_et <= time.
p_et);
140 bool iTime::operator>(
const iTime &time) {
141 return (p_et > time.
p_et);
152 bool iTime::operator<(
const iTime &time) {
153 return (p_et < time.
p_et);
163 bool iTime::operator!=(
const iTime &time) {
164 return (p_et != time.
p_et);
174 bool iTime::operator==(
const iTime &time) {
175 return (p_et == time.
p_et);
186 void iTime::operator +=(
const double &secondsToAdd) {
188 p_et += secondsToAdd;
192 iTime
operator +(
const double &secondsToAdd, iTime time) {
193 time += secondsToAdd;
202 tmp -= secondsToSubtract;
208 return p_et - iTimeToSubtract.p_et;
212 void iTime::operator -=(
const double &secondsToSubtract) {
214 p_et -= secondsToSubtract;
218 iTime
operator -(
const double &secondsToSubtract, iTime time) {
219 time -= secondsToSubtract;
233 QString iTime::YearString()
const {
242 int iTime::Year()
const {
246 timout_c(p_et,
"YYYY", 5, out);
255 QString iTime::MonthString()
const {
264 int iTime::Month()
const {
268 timout_c(p_et,
"MM", 3, out);
277 QString iTime::DayString()
const {
286 int iTime::Day()
const {
290 timout_c(p_et,
"DD", 3, out);
299 QString iTime::HourString()
const {
308 int iTime::Hour()
const {
312 timout_c(p_et,
"HR", 3, out);
321 QString iTime::MinuteString()
const {
330 int iTime::Minute()
const {
334 timout_c(p_et,
"MN", 3, out);
343 QString iTime::SecondString()
const {
345 osec.setf(ios::fixed);
346 osec << setprecision(8) << Second();
347 QString sSeconds(osec.str().c_str());
348 sSeconds = sSeconds.remove(QRegExp(
"(\\.0*|0*)$"));
350 if(sSeconds.isEmpty()) sSeconds =
"0";
360 double iTime::Second()
const {
364 timout_c(p_et,
"SC.#######::RND", 256, out);
373 QString iTime::DayOfYearString()
const {
382 int iTime::DayOfYear()
const {
386 timout_c(p_et,
"DOY", 4, out);
396 QString iTime::EtString()
const {
405 QString iTime::UTC()
const {
406 QString utc = YearString() +
"-" ;
407 if(Month() < 10) utc +=
"0" + MonthString() +
"-";
408 else utc += MonthString() +
"-";
410 if(Day() < 10) utc +=
"0" + DayString() +
"T";
411 else utc += DayString() +
"T";
413 if(Hour() < 10) utc +=
"0" + HourString() +
":";
414 else utc += HourString() +
":";
416 if(Minute() < 10) utc +=
"0" + MinuteString() +
":";
417 else utc += MinuteString() +
":";
419 if(Second() < 10) utc +=
"0" + SecondString();
420 else utc += SecondString();
425 void iTime::setEt(
double et) {
432 void iTime::setUtc(QString utcString) {
433 LoadLeapSecondKernel();
436 utc2et_c(utcString.toAscii().data(), &et);
446 void iTime::LoadLeapSecondKernel() {
449 if(p_lpInitialized)
return;
453 QString baseDir = dataDir[
"Base"];
454 baseDir +=
"/kernels/lsk/";
455 FileName leapSecond(baseDir +
"naif????.tls");
457 QString leapSecondName(leapSecond.highestVersion().expanded());
458 furnsh_c(leapSecondName.toAscii().data());
460 p_lpInitialized =
true;
464 void iTime::UnloadLeapSecondKernel() {
479 QString iTime::CurrentGMT() {
480 time_t startTime = time(NULL);
481 struct tm *tmbuf = gmtime(&startTime);
483 strftime(timestr, 80,
"%Y-%m-%dT%H:%M:%S", tmbuf);
484 return (QString) timestr;
495 QString iTime::CurrentLocalTime() {
496 time_t startTime = time(NULL);
497 struct tm *tmbuf = localtime(&startTime);
499 strftime(timestr, 80,
"%Y-%m-%dT%H:%M:%S", tmbuf);
500 return (QString) timestr;