38 bool iTime::p_lpInitialized =
false;
55 iTime::iTime(
const QString &time) {
56 LoadLeapSecondKernel();
58 NaifStatus::CheckErrors();
61 str2et_c(time.toAscii().data(), &et);
64 NaifStatus::CheckErrors();
66 UnloadLeapSecondKernel();
80 void iTime::operator=(
const QString &time) {
81 LoadLeapSecondKernel();
83 NaifStatus::CheckErrors();
86 str2et_c(time.toAscii().data(), &et);
89 NaifStatus::CheckErrors();
91 UnloadLeapSecondKernel();
95 void iTime::operator=(
const char *time) {
96 LoadLeapSecondKernel();
98 NaifStatus::CheckErrors();
104 NaifStatus::CheckErrors();
106 UnloadLeapSecondKernel();
111 void iTime::operator=(
const double time) {
112 LoadLeapSecondKernel();
114 UnloadLeapSecondKernel();
124 bool iTime::operator>=(
const iTime &time) {
125 return (p_et >= time.
p_et);
135 bool iTime::operator<=(
const iTime &time) {
136 return (p_et <= time.
p_et);
146 bool iTime::operator>(
const iTime &time) {
147 return (p_et > time.
p_et);
158 bool iTime::operator<(
const iTime &time) {
159 return (p_et < time.
p_et);
169 bool iTime::operator!=(
const iTime &time) {
170 return (p_et != time.
p_et);
180 bool iTime::operator==(
const iTime &time) {
181 return (p_et == time.
p_et);
192 void iTime::operator +=(
const double &secondsToAdd) {
194 p_et += secondsToAdd;
198 iTime
operator +(
const double &secondsToAdd, iTime time) {
199 time += secondsToAdd;
208 tmp -= secondsToSubtract;
214 return p_et - iTimeToSubtract.p_et;
218 void iTime::operator -=(
const double &secondsToSubtract) {
220 p_et -= secondsToSubtract;
224 iTime
operator -(
const double &secondsToSubtract, iTime time) {
225 time -= secondsToSubtract;
239 QString iTime::YearString()
const {
248 int iTime::Year()
const {
249 NaifStatus::CheckErrors();
253 timout_c(p_et,
"YYYY", 5, out);
254 NaifStatus::CheckErrors();
263 QString iTime::MonthString()
const {
272 int iTime::Month()
const {
273 NaifStatus::CheckErrors();
277 timout_c(p_et,
"MM", 3, out);
278 NaifStatus::CheckErrors();
287 QString iTime::DayString()
const {
296 int iTime::Day()
const {
297 NaifStatus::CheckErrors();
301 timout_c(p_et,
"DD", 3, out);
302 NaifStatus::CheckErrors();
311 QString iTime::HourString()
const {
320 int iTime::Hour()
const {
321 NaifStatus::CheckErrors();
325 timout_c(p_et,
"HR", 3, out);
326 NaifStatus::CheckErrors();
335 QString iTime::MinuteString()
const {
344 int iTime::Minute()
const {
345 NaifStatus::CheckErrors();
349 timout_c(p_et,
"MN", 3, out);
350 NaifStatus::CheckErrors();
359 QString iTime::SecondString()
const {
361 osec.setf(ios::fixed);
362 osec << setprecision(8) << Second();
363 QString sSeconds(osec.str().c_str());
364 sSeconds = sSeconds.remove(QRegExp(
"(\\.0*|0*)$"));
366 if(sSeconds.isEmpty()) sSeconds =
"0";
376 double iTime::Second()
const {
377 NaifStatus::CheckErrors();
381 timout_c(p_et,
"SC.#######::RND", 256, out);
382 NaifStatus::CheckErrors();
391 QString iTime::DayOfYearString()
const {
400 int iTime::DayOfYear()
const {
401 NaifStatus::CheckErrors();
405 timout_c(p_et,
"DOY", 4, out);
406 NaifStatus::CheckErrors();
416 QString iTime::EtString()
const {
425 QString iTime::UTC()
const {
426 QString utc = YearString() +
"-" ;
427 if(Month() < 10) utc +=
"0" + MonthString() +
"-";
428 else utc += MonthString() +
"-";
430 if(Day() < 10) utc +=
"0" + DayString() +
"T";
431 else utc += DayString() +
"T";
433 if(Hour() < 10) utc +=
"0" + HourString() +
":";
434 else utc += HourString() +
":";
436 if(Minute() < 10) utc +=
"0" + MinuteString() +
":";
437 else utc += MinuteString() +
":";
439 if(Second() < 10) utc +=
"0" + SecondString();
440 else utc += SecondString();
445 void iTime::setEt(
double et) {
452 void iTime::setUtc(QString utcString) {
453 NaifStatus::CheckErrors();
454 LoadLeapSecondKernel();
457 utc2et_c(utcString.toAscii().data(), &et);
459 NaifStatus::CheckErrors();
468 void iTime::LoadLeapSecondKernel() {
471 if(p_lpInitialized)
return;
475 QString baseDir = dataDir[
"Base"];
476 baseDir +=
"/kernels/lsk/";
477 FileName leapSecond(baseDir +
"naif????.tls");
479 NaifStatus::CheckErrors();
480 QString leapSecondName(leapSecond.highestVersion().expanded());
481 furnsh_c(leapSecondName.toAscii().data());
482 NaifStatus::CheckErrors();
484 p_lpInitialized =
true;
488 void iTime::UnloadLeapSecondKernel() {
503 QString iTime::CurrentGMT() {
504 time_t startTime = time(NULL);
505 struct tm *tmbuf = gmtime(&startTime);
507 strftime(timestr, 80,
"%Y-%m-%dT%H:%M:%S", tmbuf);
508 return (QString) timestr;
519 QString iTime::CurrentLocalTime() {
520 time_t startTime = time(NULL);
521 struct tm *tmbuf = localtime(&startTime);
523 strftime(timestr, 80,
"%Y-%m-%dT%H:%M:%S", tmbuf);
524 return (QString) timestr;