OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
ossimLocalTm Class Reference

#include <ossimDate.h>

Inheritance diagram for ossimLocalTm:
ossimDate ossimTime

Public Types

enum  ossimLocalTmFormat {
  ossimLocalTmFormatYear = (int)0x0001, ossimLocalTmFormatYearShort = (int)0x0002, ossimLocalTmFormatPadYear = (int)0x0004, ossimLocalTmFormatZeroYear = (int)0x0008,
  ossimLocalTmFormatMonth = (int)0x0010, ossimLocalTmFormatMonText = (int)0x0020, ossimLocalTmFormatPadMon = (int)0x0040, ossimLocalTmFormatZeroMon = (int)0x0080,
  ossimLocalTmFormatDay = (int)0x0100, ossimLocalTmFormatDayOfWeek = (int)0x0200, ossimLocalTmFormatPadDay = (int)0x0400, ossimLocalTmFormatZeroDay = (int)0x0800,
  ossimLocalTmFormatDMY = (int)0x0111, ossimLocalTmFormatPadDMY = (int)0x0444, ossimLocalTmFormatZeroDMY = (int)0x0888, ossimLocalTmFormatYearFirst = (int)0x1000,
  ossimLocalTmFormatMonFirst = (int)0x2000, ossimLocalTmFormatSepChar = (int)0x4000, ossimLocalTmFormatSepSpace = (int)0x8000, ossimLocalTmFormatInternational,
  ossimLocalTmFormatIntlShort, ossimLocalTmFormatUsa, ossimLocalTmFormatEnglish, ossimLocalTmFormatJapanese,
  ossimLocalTmFormatFull
}
 
enum  ossimTimeFormat {
  ossimTimeFormatSecs = (int)0x0001, ossimTimeFormatZeroSecs = (int)0x0002, ossimTimeFormatPadSecs = (int)0x0004, ossimTimeFormatSecsAll = (int)0x0007,
  ossimTimeFormatTimeZone = (int)0x0008, ossimTimeFormatMins = (int)0x0010, ossimTimeFormatZeroMins = (int)0x0020, ossimTimeFormatPadMins = (int)0x0040,
  ossimTimeFormatMinsAll = (int)0x0070, ossimTimeFormatTZNumeric = (int)0x0080, ossimTimeFormatHour = (int)0x0100, ossimTimeFormatZeroHour = (int)0x0200,
  ossimTimeFormatPadHour = (int)0x0400, ossimTimeFormatHourAll = (int)0x0700, ossimTimeFormat24hour = (int)0x0800, ossimTimeFormatSepChar = (int)0x1000,
  ossimTimeFormatSepSpace = (int)0x2000, ossimTimeFormatSepAbbrev = (int)0x4000, ossimTimeFormatAmPm = (int)0x8000, ossimTimeFormatInternational,
  ossimTimeFormatShortTime, ossimTimeFormatClockTime, ossimTimeFormatLongTime, ossimTimeFormatMillitary = (int)(ossimTimeFormatHourAll|ossimTimeFormatMinsAll|ossimTimeFormat24hour)
}
 

Public Member Functions

 ossimLocalTm (time_t t=0)
 
 ossimLocalTm (tm const &t)
 
 ossimLocalTm (const ossimLocalTm &t)
 
ossimLocalTmoperator= (tm const &t)
 
ossimLocalTmoperator= (const ossimLocalTm &t)
 
 operator time_t (void) const
 
int isValid (void) const
 
void now ()
 
int compare (ossimLocalTm const &t) const
 
int compare (std::time_t const tt) const
 
std::ostream & print (std::ostream &os, int df=datefmt, int tf=timefmt) const
 
std::ostream & printTime (std::ostream &os, int f=timefmt) const
 
std::ostream & printDate (std::ostream &os, int f=datefmt) const
 
std::ostream & dump (std::ostream &os) const
 method to dump all the data members. More...
 
int getYear () const
 
int getShortYear () const
 
int getMonth () const
 
int getDay () const
 
double getJulian () const
 
double getModifiedJulian () const
 
ossimLocalTmsetDay (int day)
 
ossimLocalTmsetMonth (int month)
 
ossimLocalTmsetYear (int year)
 
ossimLocalTmsetDateFromJulian (double jd)
 
ossimLocalTmsetDateFromModifiedJulian (double mjd)
 
void setFractionalDay (double fractionalDay)
 
int getHour () const
 
int getMin () const
 
int getSec () const
 
double getFractionalSecond () const
 
ossimLocalTmsetHour (int h)
 
ossimLocalTmsetMin (int m)
 
ossimLocalTmsetSec (int s)
 
ossimLocalTmsetFloatSec (double s)
 
ossimLocalTmsetFractionalSecond (double fractS)
 
time_t getTicks () const
 getTicks() will call getEpoc. More...
 
time_t getEpoc () const
 
void addSeconds (ossim_float64 n)
 
void addMinutes (ossim_float64 n)
 
void addHours (ossim_float64 n)
 
void addDays (ossim_float64 n)
 
ossim_float64 deltaInSeconds (const ossimLocalTm &d) const
 
ossim_float64 deltaInMinutes (const ossimLocalTm &d) const
 
ossim_float64 delatInHours (const ossimLocalTm &d) const
 
ossim_float64 deltaInDays (const ossimLocalTm &d) const
 
ossimLocalTm convertToGmt () const
 
void setTimeNoAdjustmentGivenEpoc (time_t ticks)
 Will not adjust for timezone. More...
 
void setTimeGivenEpoc (time_t ticks)
 Will adjust for timezone. More...
 
bool setIso8601 (const std::string &timeString, bool shiftToGmtOffsetZero=false)
 
ossimRefPtr< ossimXmlNodesaveXml () const
 
bool loadXml (ossimRefPtr< ossimXmlNode > dateNode)
 

Static Public Member Functions

static void extractHmsFromFractionalDay (double fractionalDay, int &h, int &m, int &s, double &fractionalSecond)
 

Static Public Attributes

static char timech = ':'
 
static char datech = '/'
 
static int datefmt = ossimLocalTm::ossimLocalTmFormatFull
 
static int timefmt = ossimLocalTm::ossimTimeFormatInternational
 

Protected Member Functions

void tSfx (std::ostream &os, int fmt, char ch) const
 
void pHour (std::ostream &os, int fmt) const
 
void pMins (std::ostream &os, int fmt) const
 
void pSecs (std::ostream &os, int fmt) const
 
void dSfx (std::ostream &os, int fmt) const
 
void pDate (std::ostream &os, int fmt) const
 
void pMonth (std::ostream &os, int fmt) const
 
void pYear (std::ostream &os, int fmt) const
 
void setTimezoneOffsetFromGmt ()
 

Protected Attributes

double theFractionalSecond
 
int m_timezoneOffset
 

Static Protected Attributes

static std::mutex m_mutex
 

Friends

OSSIM_DLL std::ostream & operator<< (std::ostream &out, const ossimLocalTm &src)
 
OSSIM_DLL int operator== (const ossimLocalTm &t1, const ossimLocalTm &src)
 
OSSIM_DLL int operator!= (const ossimLocalTm &t1, const ossimLocalTm &src)
 
OSSIM_DLL int operator< (const ossimLocalTm &t1, const ossimLocalTm &src)
 
OSSIM_DLL int operator<= (const ossimLocalTm &t1, const ossimLocalTm &src)
 
OSSIM_DLL int operator> (const ossimLocalTm &t1, const ossimLocalTm &src)
 
OSSIM_DLL int operator>= (const ossimLocalTm &t1, const ossimLocalTm &src)
 

Detailed Description

Definition at line 19 of file ossimDate.h.

Member Enumeration Documentation

◆ ossimLocalTmFormat

Enumerator
ossimLocalTmFormatYear 
ossimLocalTmFormatYearShort 
ossimLocalTmFormatPadYear 
ossimLocalTmFormatZeroYear 
ossimLocalTmFormatMonth 
ossimLocalTmFormatMonText 
ossimLocalTmFormatPadMon 
ossimLocalTmFormatZeroMon 
ossimLocalTmFormatDay 
ossimLocalTmFormatDayOfWeek 
ossimLocalTmFormatPadDay 
ossimLocalTmFormatZeroDay 
ossimLocalTmFormatDMY 
ossimLocalTmFormatPadDMY 
ossimLocalTmFormatZeroDMY 
ossimLocalTmFormatYearFirst 
ossimLocalTmFormatMonFirst 
ossimLocalTmFormatSepChar 
ossimLocalTmFormatSepSpace 
ossimLocalTmFormatInternational 
ossimLocalTmFormatIntlShort 
ossimLocalTmFormatUsa 
ossimLocalTmFormatEnglish 
ossimLocalTmFormatJapanese 
ossimLocalTmFormatFull 

Definition at line 50 of file ossimDate.h.

51  {
52  ossimLocalTmFormatYear = (int)0x0001, // Print year
53  ossimLocalTmFormatYearShort = (int)0x0002, // Print last two digits
54  ossimLocalTmFormatPadYear = (int)0x0004, // Pad year to 2 or 4
55  ossimLocalTmFormatZeroYear = (int)0x0008, // Zero fill year
56  ossimLocalTmFormatMonth = (int)0x0010, // Print month
57  ossimLocalTmFormatMonText = (int)0x0020, // Print month in text
58  ossimLocalTmFormatPadMon = (int)0x0040, // Pad to 2 (trunc to 3)
59  ossimLocalTmFormatZeroMon = (int)0x0080, // Zero fill month
60  ossimLocalTmFormatDay = (int)0x0100, // Print date
61  ossimLocalTmFormatDayOfWeek = (int)0x0200, // Print day of week
62  ossimLocalTmFormatPadDay = (int)0x0400, // Pad date to 2
63  ossimLocalTmFormatZeroDay = (int)0x0800, // Zero fill day
64  ossimLocalTmFormatDMY = (int)0x0111, // Print date, mth, year
65  ossimLocalTmFormatPadDMY = (int)0x0444, // Pad all three
66  ossimLocalTmFormatZeroDMY = (int)0x0888, // Zero fill all three
67  ossimLocalTmFormatYearFirst = (int)0x1000, // Print year first
68  ossimLocalTmFormatMonFirst = (int)0x2000, // Print month first
69  ossimLocalTmFormatSepChar = (int)0x4000,// Separate fields datech
70  ossimLocalTmFormatSepSpace = (int)0x8000, // Separate fields space
84  };

◆ ossimTimeFormat

Enumerator
ossimTimeFormatSecs 
ossimTimeFormatZeroSecs 
ossimTimeFormatPadSecs 
ossimTimeFormatSecsAll 
ossimTimeFormatTimeZone 
ossimTimeFormatMins 
ossimTimeFormatZeroMins 
ossimTimeFormatPadMins 
ossimTimeFormatMinsAll 
ossimTimeFormatTZNumeric 
ossimTimeFormatHour 
ossimTimeFormatZeroHour 
ossimTimeFormatPadHour 
ossimTimeFormatHourAll 
ossimTimeFormat24hour 
ossimTimeFormatSepChar 
ossimTimeFormatSepSpace 
ossimTimeFormatSepAbbrev 
ossimTimeFormatAmPm 
ossimTimeFormatInternational 
ossimTimeFormatShortTime 
ossimTimeFormatClockTime 
ossimTimeFormatLongTime 
ossimTimeFormatMillitary 

Definition at line 86 of file ossimDate.h.

87  {
88  ossimTimeFormatSecs = (int)0x0001, // Print seconds
89  ossimTimeFormatZeroSecs = (int)0x0002, // Zero fill seconds
90  ossimTimeFormatPadSecs = (int)0x0004, // Pad seconds to 2
91  ossimTimeFormatSecsAll = (int)0x0007,
92  ossimTimeFormatTimeZone = (int)0x0008, // Print timezone
93  ossimTimeFormatMins = (int)0x0010, // Print minutes
94  ossimTimeFormatZeroMins = (int)0x0020, // Zero fill minutes
95  ossimTimeFormatPadMins = (int)0x0040, // Pad minutes to 2
96  ossimTimeFormatMinsAll = (int)0x0070,
97  ossimTimeFormatTZNumeric = (int)0x0080, // Print numeric TZ
98  ossimTimeFormatHour = (int)0x0100, // Print hour
99  ossimTimeFormatZeroHour = (int)0x0200, // Zero fill hour
100  ossimTimeFormatPadHour = (int)0x0400, // Pad hour to 2 digits
101  ossimTimeFormatHourAll = (int)0x0700,
102  ossimTimeFormat24hour = (int)0x0800, // 24hour clock
103  ossimTimeFormatSepChar = (int)0x1000, // Separate field timech
104  ossimTimeFormatSepSpace = (int)0x2000, // Separate fields space
105  ossimTimeFormatSepAbbrev = (int)0x4000, // Add abbreviations
106  ossimTimeFormatAmPm = (int)0x8000, // Add 'am' or 'pm'
116  };

Constructor & Destructor Documentation

◆ ossimLocalTm() [1/3]

ossimLocalTm::ossimLocalTm ( time_t  t = 0)

Definition at line 67 of file ossimDate.cpp.

References setTimezoneOffsetFromGmt().

69 {
70  if (t == 0)
71  t = time(0);
72  *(tm *)this = *localtime(&t);
73 
75 
76 }
void setTimezoneOffsetFromGmt()
Definition: ossimDate.cpp:230
double theFractionalSecond
Definition: ossimDate.h:236

◆ ossimLocalTm() [2/3]

ossimLocalTm::ossimLocalTm ( tm const &  t)

Definition at line 78 of file ossimDate.cpp.

References setTimezoneOffsetFromGmt().

80 {
81  *((tm *)this) = t;
83 }
void setTimezoneOffsetFromGmt()
Definition: ossimDate.cpp:230
double theFractionalSecond
Definition: ossimDate.h:236

◆ ossimLocalTm() [3/3]

ossimLocalTm::ossimLocalTm ( const ossimLocalTm t)

Definition at line 84 of file ossimDate.cpp.

References setTimezoneOffsetFromGmt().

86 {
87  *((tm *)this) = t;
89 }
void setTimezoneOffsetFromGmt()
Definition: ossimDate.cpp:230
double theFractionalSecond
Definition: ossimDate.h:236

Member Function Documentation

◆ addDays()

void ossimLocalTm::addDays ( ossim_float64  n)

Definition at line 652 of file ossimDate.cpp.

References getJulian(), n, and setDateFromJulian().

653 {
655 }
os2<< "> n<< " > nendobj n
ossimLocalTm & setDateFromJulian(double jd)
Definition: ossimDate.cpp:504
double getJulian() const
Definition: ossimDate.cpp:458

◆ addHours()

void ossimLocalTm::addHours ( ossim_float64  n)

Definition at line 647 of file ossimDate.cpp.

References getJulian(), n, and setDateFromJulian().

648 {
649  setDateFromJulian(getJulian() + (n/24.0));
650 }
os2<< "> n<< " > nendobj n
ossimLocalTm & setDateFromJulian(double jd)
Definition: ossimDate.cpp:504
double getJulian() const
Definition: ossimDate.cpp:458

◆ addMinutes()

void ossimLocalTm::addMinutes ( ossim_float64  n)

Definition at line 642 of file ossimDate.cpp.

References getJulian(), n, and setDateFromJulian().

643 {
644  setDateFromJulian(getJulian() + (n/1440.0));
645 }
os2<< "> n<< " > nendobj n
ossimLocalTm & setDateFromJulian(double jd)
Definition: ossimDate.cpp:504
double getJulian() const
Definition: ossimDate.cpp:458

◆ addSeconds()

void ossimLocalTm::addSeconds ( ossim_float64  n)

Definition at line 636 of file ossimDate.cpp.

References getJulian(), n, and setDateFromJulian().

637 {
638  // use julian to help in this addition. Julian is in days
639  setDateFromJulian(getJulian() + (n/86400.0));
640 }
os2<< "> n<< " > nendobj n
ossimLocalTm & setDateFromJulian(double jd)
Definition: ossimDate.cpp:504
double getJulian() const
Definition: ossimDate.cpp:458

◆ compare() [1/2]

int ossimLocalTm::compare ( ossimLocalTm const &  t) const

Definition at line 104 of file ossimDate.cpp.

Referenced by operator!=(), operator<(), operator<=(), operator==(), operator>(), and operator>=().

105 {
106  return compare ((time_t)t);
107 }
int compare(ossimLocalTm const &t) const
Definition: ossimDate.cpp:104

◆ compare() [2/2]

int ossimLocalTm::compare ( std::time_t const  tt) const

◆ convertToGmt()

ossimLocalTm ossimLocalTm::convertToGmt ( ) const

Definition at line 677 of file ossimDate.cpp.

References m_mutex, and m_timezoneOffset.

Referenced by ossimNitfFileHeaderV2_X::formatDate().

678 {
679  m_mutex.lock();
680  struct tm gmt = *this;
681 #if !defined(_MSC_VER)
682  tzset();
683 #else
684  _tzset();
685 #endif
686 
687 #if ( defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) )
688  gmt.tm_sec -= tm_gmtoff; // Seconds east of UTC
689 #elif (defined(WIN32))
690  long timezoneOffset=0;
691  _get_timezone(&timezoneOffset);
692  //m_timezoneOffset = timezone; // Seconds west of UTC
693  if ( tm_isdst )
694  {
695  timezoneOffset -= 3600; // Subtract an hour.
696  }
697  m_timezoneOffset = -timezoneOffset;
698 #else
699  m_timezoneOffset = timezone; // Seconds west of UTC
700  if ( tm_isdst )
701  {
702  m_timezoneOffset -= 3600; // Subtract an hour.
703  }
705 #endif
706 
707  time_t t = mktime(&gmt);
708  std::tm localTime = *localtime(&t);
709 
710 m_mutex.unlock();
711  ossimLocalTm result(localTime);
712 
713  return result;
714 }
static std::mutex m_mutex
Definition: ossimDate.h:235
int m_timezoneOffset
Definition: ossimDate.h:237

◆ delatInHours()

ossim_float64 ossimLocalTm::delatInHours ( const ossimLocalTm d) const

Definition at line 667 of file ossimDate.cpp.

References getJulian().

668 {
669  return (getJulian()-d.getJulian())*24;
670 }
double getJulian() const
Definition: ossimDate.cpp:458

◆ deltaInDays()

ossim_float64 ossimLocalTm::deltaInDays ( const ossimLocalTm d) const

Definition at line 672 of file ossimDate.cpp.

References getJulian().

673 {
674  return (getJulian()-d.getJulian());
675 }
double getJulian() const
Definition: ossimDate.cpp:458

◆ deltaInMinutes()

ossim_float64 ossimLocalTm::deltaInMinutes ( const ossimLocalTm d) const

Definition at line 662 of file ossimDate.cpp.

References getJulian().

663 {
664  return (getJulian()-d.getJulian())*1440.0;
665 }
double getJulian() const
Definition: ossimDate.cpp:458

◆ deltaInSeconds()

ossim_float64 ossimLocalTm::deltaInSeconds ( const ossimLocalTm d) const

Definition at line 657 of file ossimDate.cpp.

References getJulian().

658 {
659  return (getJulian()-d.getJulian())*86400.0;
660 }
double getJulian() const
Definition: ossimDate.cpp:458

◆ dSfx()

void ossimLocalTm::dSfx ( std::ostream &  os,
int  fmt 
) const
protected

Definition at line 139 of file ossimDate.cpp.

References datech, ossimLocalTmFormatSepChar, and ossimLocalTmFormatSepSpace.

Referenced by pDate(), pMonth(), and pYear().

140 {
141  if (fmt & ossimLocalTmFormatSepChar)
142  os << datech;
143  if (fmt & ossimLocalTmFormatSepSpace)
144  os << ' ';
145 }
static char datech
Definition: ossimDate.h:120

◆ dump()

std::ostream & ossimLocalTm::dump ( std::ostream &  os) const

method to dump all the data members.

This is the tm struct + the theFractionalSecond from this class.

Note
: tm_gmtoff and tm_zone from tm struct are not printed as they are not standard.
Parameters
osStream to dump to.
Returns
stream.

Definition at line 318 of file ossimDate.cpp.

References theFractionalSecond.

319 {
320  // Capture the original flags.
321  std::ios_base::fmtflags f = os.flags();
322 
323  os << setiosflags(ios::fixed) << setprecision(8) << setiosflags(ios::left);
324 
325  os << "fr_sec: " << setw(12) << theFractionalSecond
326  << "fractional second\n"
327  << "tm_sec: " << setw(12) << tm_sec
328  << "seconds [0-60] (1 leap second)\n"
329  << "tm_min: " << setw(12) << tm_min << "minutes [0-59]\n"
330  << "tm_hour: " << setw(12) << tm_hour << "hours [0-23]\n"
331  << "tm_mday: " << setw(12) << tm_mday << "day [1-31]\n"
332  << "tm_mon: " << setw(12) << tm_mon << "month [0-11]\n"
333  << "tm_year: " << setw(12) << tm_year << "year - 1900\n"
334  << "tm_wday: " << setw(12) << tm_wday << "day of week [0-6]\n"
335  << "tm_yday: " << setw(12) << tm_yday << "days in year[0-365]\n"
336  << "tm_isdst: " << setw(12) << tm_isdst << "DST.[-1/0/1]\n"
337  << std::endl;
338 
339  // Reset flags.
340  os.setf(f);
341 
342  return os;
343 }
double theFractionalSecond
Definition: ossimDate.h:236

◆ extractHmsFromFractionalDay()

void ossimLocalTm::extractHmsFromFractionalDay ( double  fractionalDay,
int &  h,
int &  m,
int &  s,
double &  fractionalSecond 
)
static

Definition at line 552 of file ossimDate.cpp.

Referenced by setFractionalDay().

557 {
558  fractionalDay *=24;
559  h = (int)fractionalDay;
560  fractionalDay = fractionalDay-h;
561  fractionalDay*=60;
562  m = (int)fractionalDay;
563  fractionalDay = fractionalDay-m;
564  fractionalDay*=60;
565  s = (int)fractionalDay;
566  fractionalDay = fractionalDay-s;
567  fractionalSecond = fractionalDay;
568 }

◆ getDay()

int ossimLocalTm::getDay ( ) const

returns the day 1-31

Definition at line 453 of file ossimDate.cpp.

Referenced by ossimNitfFileHeaderV2_X::formatDate(), getJulian(), ossimplugins::ossim::iso8601TimeStringToCivilDate(), saveXml(), and ossimDateProperty::valueToString().

454 {
455  return tm_mday;
456 }

◆ getEpoc()

time_t ossimLocalTm::getEpoc ( ) const

Definition at line 629 of file ossimDate.cpp.

Referenced by getTicks().

630 {
631  std::tm temp = *this;
632 
633  return mktime(&temp);
634 }

◆ getFractionalSecond()

double ossimLocalTm::getFractionalSecond ( ) const

Definition at line 585 of file ossimDate.cpp.

References theFractionalSecond.

Referenced by ossimplugins::ossim::iso8601TimeStringToCivilDate(), and saveXml().

586 {
587  return theFractionalSecond;
588 }
double theFractionalSecond
Definition: ossimDate.h:236

◆ getHour()

int ossimLocalTm::getHour ( ) const

Definition at line 570 of file ossimDate.cpp.

Referenced by ossimNitfFileHeaderV2_X::formatDate(), getJulian(), saveXml(), and ossimDateProperty::valueToString().

571 {
572  return tm_hour;
573 }

◆ getJulian()

double ossimLocalTm::getJulian ( ) const

Definition at line 458 of file ossimDate.cpp.

References getDay(), getHour(), getMin(), getMonth(), getSec(), getYear(), and theFractionalSecond.

Referenced by addDays(), addHours(), addMinutes(), addSeconds(), delatInHours(), deltaInDays(), deltaInMinutes(), deltaInSeconds(), ossimFfL7::getJulianDay(), and getModifiedJulian().

459 {
460  int J = getMonth();
461  int K = getDay();
462  int I = getYear();
463 
464  return (K-32075+1461*(I+4800+(J-14)/12)/4+367*(J-2-(J-14)/12*12)
465  /12-3*((I+4900+(J-14)/12)/100)/4+
466  (getHour()/24.0)+
467  (getMin()/1440.0)+
468  ((getSec()+theFractionalSecond)/86400.0));
469 }
int getSec() const
Definition: ossimDate.cpp:580
int getYear() const
Definition: ossimDate.cpp:433
int getMin() const
Definition: ossimDate.cpp:575
int getMonth() const
Definition: ossimDate.cpp:448
int getDay() const
Definition: ossimDate.cpp:453
int getHour() const
Definition: ossimDate.cpp:570
double theFractionalSecond
Definition: ossimDate.h:236

◆ getMin()

int ossimLocalTm::getMin ( ) const

Definition at line 575 of file ossimDate.cpp.

Referenced by ossimNitfFileHeaderV2_X::formatDate(), getJulian(), saveXml(), and ossimDateProperty::valueToString().

576 {
577  return tm_min;
578 }

◆ getModifiedJulian()

double ossimLocalTm::getModifiedJulian ( ) const

Definition at line 471 of file ossimDate.cpp.

References getJulian().

472 {
473  return getJulian() - 2400000.5;
474 }
double getJulian() const
Definition: ossimDate.cpp:458

◆ getMonth()

int ossimLocalTm::getMonth ( ) const

This is one based i.e. values are returned between 1-12

Definition at line 448 of file ossimDate.cpp.

Referenced by ossimNitfFileHeaderV2_X::formatDate(), getJulian(), ossimplugins::ossim::iso8601TimeStringToCivilDate(), saveXml(), and ossimDateProperty::valueToString().

449 {
450  return ((tm_mon % 12)+1);
451 }

◆ getSec()

int ossimLocalTm::getSec ( ) const

Definition at line 580 of file ossimDate.cpp.

Referenced by ossimNitfFileHeaderV2_X::formatDate(), getJulian(), saveXml(), and ossimDateProperty::valueToString().

581 {
582  return tm_sec;
583 }

◆ getShortYear()

int ossimLocalTm::getShortYear ( ) const

Definition at line 443 of file ossimDate.cpp.

References getYear().

444 {
445  return (getYear()%100);
446 }
int getYear() const
Definition: ossimDate.cpp:433

◆ getTicks()

time_t ossimLocalTm::getTicks ( ) const

getTicks() will call getEpoc.

This is te number of microseconds passed since (00:00:00 UTC, January 1, 1970)

Definition at line 624 of file ossimDate.cpp.

References getEpoc().

Referenced by ossimFilename::setTimes().

625 {
626  return getEpoc();
627 }
time_t getEpoc() const
Definition: ossimDate.cpp:629

◆ getYear()

int ossimLocalTm::getYear ( ) const

Definition at line 433 of file ossimDate.cpp.

Referenced by ossimNitfFileHeaderV2_X::formatDate(), getJulian(), getShortYear(), ossimplugins::ossim::iso8601TimeStringToCivilDate(), saveXml(), and ossimDateProperty::valueToString().

434 {
435  int result = tm_year;
436 // if (result < 200)
437  {
438  result += 1900;
439  }
440  return result;
441 }

◆ isValid()

int ossimLocalTm::isValid ( void  ) const

Definition at line 120 of file ossimDate.cpp.

121 {
122  static int maxd[] =
123  {
124  31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
125  };
126 
127  return ((tm_year > 0) &&
128  (tm_mon >= 0) && (tm_mon < 12) &&
129  (tm_mday > 0) && (tm_mday <= maxd[tm_mon]) &&
130  (tm_wday < 7) && (tm_yday < 367) &&
131  (tm_sec < 60) && (tm_min < 60) && (tm_hour < 24));
132 }

◆ loadXml()

bool ossimLocalTm::loadXml ( ossimRefPtr< ossimXmlNode dateNode)

Definition at line 1033 of file ossimDate.cpp.

References ossimXmlNode::findFirstNode(), ossimXmlNode::getText(), setDateFromJulian(), setDateFromModifiedJulian(), setDay(), setFractionalSecond(), setHour(), setMin(), setMonth(), setSec(), setYear(), ossimString::toDouble(), ossimString::toInt32(), and ossimRefPtr< T >::valid().

1034 {
1035  bool result = true;
1036  ossimRefPtr<ossimXmlNode> month = dateNode->findFirstNode("month");
1037  ossimRefPtr<ossimXmlNode> day = dateNode->findFirstNode("day");
1038  ossimRefPtr<ossimXmlNode> year = dateNode->findFirstNode("year");
1039  ossimRefPtr<ossimXmlNode> hour = dateNode->findFirstNode("hour");
1040  ossimRefPtr<ossimXmlNode> minutes = dateNode->findFirstNode("minutes");
1041  ossimRefPtr<ossimXmlNode> seconds = dateNode->findFirstNode("seconds");
1042  ossimRefPtr<ossimXmlNode> fractionalSecond = dateNode->findFirstNode("fractionalSecond");
1043  ossimRefPtr<ossimXmlNode> julian = dateNode->findFirstNode("julian");
1044  ossimRefPtr<ossimXmlNode> modifiedJulian = dateNode->findFirstNode("modifiedJulian");
1045 
1046  if(month.valid()&&
1047  day.valid()&&
1048  year.valid()&&
1049  hour.valid()&&
1050  minutes.valid()&&
1051  seconds.valid())
1052  {
1053  setMonth(month->getText().toInt32());
1054  setDay(day->getText().toInt32());
1055  setYear(year->getText().toInt32());
1056  setHour(hour->getText().toInt32());
1057  setMin(minutes->getText().toInt32());
1058  setSec(seconds->getText().toInt32());
1059  if(fractionalSecond.valid())
1060  {
1061  setFractionalSecond(fractionalSecond->getText().toDouble());
1062  }
1063  else
1064  {
1065  setFractionalSecond(0.0);
1066  }
1067  }
1068  else if(modifiedJulian.valid())
1069  {
1070  setDateFromModifiedJulian(modifiedJulian->getText().toDouble());
1071  }
1072  else if(julian.valid())
1073  {
1074  setDateFromJulian(julian->getText().toDouble());
1075  }
1076  else
1077  {
1078  result = false;
1079  }
1080 
1081  return result;
1082 }
ossimLocalTm & setDateFromModifiedJulian(double mjd)
Definition: ossimDate.cpp:533
ossimLocalTm & setDay(int day)
Definition: ossimDate.cpp:476
bool valid() const
Definition: ossimRefPtr.h:75
const ossimRefPtr< ossimXmlNode > & findFirstNode(const ossimString &rel_xpath) const
ossim_int32 toInt32() const
const ossimString & getText() const
Definition: ossimXmlNode.h:92
ossimLocalTm & setFractionalSecond(double fractS)
Definition: ossimDate.cpp:617
ossimLocalTm & setMonth(int month)
Definition: ossimDate.cpp:483
double toDouble() const
ossimLocalTm & setYear(int year)
Definition: ossimDate.cpp:490
ossimLocalTm & setHour(int h)
Definition: ossimDate.cpp:590
ossimLocalTm & setSec(int s)
Definition: ossimDate.cpp:604
ossimLocalTm & setDateFromJulian(double jd)
Definition: ossimDate.cpp:504
ossimLocalTm & setMin(int m)
Definition: ossimDate.cpp:597

◆ now()

void ossimLocalTm::now ( )

Definition at line 133 of file ossimDate.cpp.

Referenced by setIso8601().

134 {
135  time_t t = time(0);
136  *this = *localtime(&t);
137 }

◆ operator time_t()

ossimLocalTm::operator time_t ( void  ) const

Definition at line 115 of file ossimDate.cpp.

116 {
117  return mktime ((tm *)this);
118 }

◆ operator=() [1/2]

ossimLocalTm & ossimLocalTm::operator= ( tm const &  t)

Definition at line 91 of file ossimDate.cpp.

92 {
93  *((tm *)this) = t;
94  return *this;
95 }

◆ operator=() [2/2]

ossimLocalTm & ossimLocalTm::operator= ( const ossimLocalTm t)

Definition at line 97 of file ossimDate.cpp.

References theFractionalSecond.

98 {
99  *((tm *)this) = t;
101  return *this;
102 }
double theFractionalSecond
Definition: ossimDate.h:236

◆ pDate()

void ossimLocalTm::pDate ( std::ostream &  os,
int  fmt 
) const
protected

◆ pHour()

void ossimLocalTm::pHour ( std::ostream &  os,
int  fmt 
) const
protected

Definition at line 355 of file ossimDate.cpp.

References ossimTimeFormat24hour, ossimTimeFormatAmPm, ossimTimeFormatHour, ossimTimeFormatMins, ossimTimeFormatPadHour, ossimTimeFormatSepAbbrev, ossimTimeFormatZeroHour, and tSfx().

Referenced by printTime().

356 {
357  if (fmt & ossimTimeFormatHour)
358  {
359  int hour = tm_hour;
360  if (!(fmt & ossimTimeFormat24hour))
361  {
362  if (hour > 12)
363  hour -= 12;
364  else if (!hour && (fmt & ossimTimeFormatAmPm))
365  hour += 12;
366  }
367  os << std::setw((fmt & ossimTimeFormatPadHour) ? 2 : 0);
368  os << std::setfill((fmt & ossimTimeFormatZeroHour) ? '0' : ' ');
369  os << hour;
370  if (!(fmt & ossimTimeFormatMins))
372  tSfx (os, fmt, 'h');
373  }
374 }
void tSfx(std::ostream &os, int fmt, char ch) const
Definition: ossimDate.cpp:345

◆ pMins()

void ossimLocalTm::pMins ( std::ostream &  os,
int  fmt 
) const
protected

Definition at line 376 of file ossimDate.cpp.

References min, ossimTimeFormatHour, ossimTimeFormatMins, ossimTimeFormatPadMins, ossimTimeFormatSecs, ossimTimeFormatSepAbbrev, ossimTimeFormatZeroMins, and tSfx().

Referenced by printTime().

377 {
378  if (fmt & ossimTimeFormatMins)
379  {
380  int min = tm_min;
381  int dig = 2;
382  if (!(fmt & ossimTimeFormatHour))
383  {
384  min += (tm_hour * 60);
385  dig += 2;
386  }
387  os << std::setw((fmt & ossimTimeFormatPadMins) ? dig : 0);
388  os << std::setfill((fmt & ossimTimeFormatZeroMins) ? '0' : ' ');
389  os << min;
390  if (!(fmt & ossimTimeFormatSecs))
392  tSfx (os, fmt, 'm');
393  }
394 }
void tSfx(std::ostream &os, int fmt, char ch) const
Definition: ossimDate.cpp:345
#define min(a, b)
Definition: auxiliary.h:75

◆ pMonth()

void ossimLocalTm::pMonth ( std::ostream &  os,
int  fmt 
) const
protected

Definition at line 175 of file ossimDate.cpp.

References dSfx(), ossimLocalTmFormatDay, ossimLocalTmFormatMonFirst, ossimLocalTmFormatMonText, ossimLocalTmFormatMonth, ossimLocalTmFormatPadMon, ossimLocalTmFormatSepChar, ossimLocalTmFormatSepSpace, ossimLocalTmFormatYear, ossimLocalTmFormatYearFirst, ossimLocalTmFormatZeroMon, and x.

Referenced by printDate().

176 {
177 
178  static const char * _months[] =
179  {
180  "January", "February", "March", "April",
181  "May", "June", "July", "August", "September",
182  "October", "November", "December"
183  };
184 
185  if (fmt & ossimLocalTmFormatMonth)
186  {
187  int mon = (tm_mon % 12);
188  if (fmt & ossimLocalTmFormatMonText)
189  {
190  char const * tmon = _months[mon];
191  if (!(fmt & ossimLocalTmFormatPadMon))
192  os << tmon;
193  else
194  for (int x = 0; x < 3; ++x)
195  os << tmon[x];
196  }
197  else
198  {
199  ++mon;
200  os << std::setw((fmt & ossimLocalTmFormatPadMon) ? 2 : 0);
201  os << std::setfill((fmt & ossimLocalTmFormatZeroMon) ? '0' : ' ');
202  os << mon;
203  }
204  if (((fmt & ossimLocalTmFormatYear) && !(fmt & ossimLocalTmFormatYearFirst)) ||
206  {
208  dSfx (os, fmt);
209  }
210  }
211 }
ossim_uint32 x
void dSfx(std::ostream &os, int fmt) const
Definition: ossimDate.cpp:139

◆ print()

std::ostream & ossimLocalTm::print ( std::ostream &  os,
int  df = datefmt,
int  tf = timefmt 
) const

Definition at line 265 of file ossimDate.cpp.

References printDate(), and printTime().

Referenced by operator<<().

268 {
269  std::ostringstream pTmp;
270  printDate (pTmp, df);
271  pTmp << ' ';
272  printTime (pTmp, tf);
273 
274  return os << pTmp.str();
275 }
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
std::ostream & printTime(std::ostream &os, int f=timefmt) const
Definition: ossimDate.cpp:418
std::ostream & printDate(std::ostream &os, int f=datefmt) const
Definition: ossimDate.cpp:279

◆ printDate()

std::ostream & ossimLocalTm::printDate ( std::ostream &  os,
int  f = datefmt 
) const

Definition at line 279 of file ossimDate.cpp.

References ossimLocalTmFormatDayOfWeek, ossimLocalTmFormatDMY, ossimLocalTmFormatMonFirst, ossimLocalTmFormatPadDay, ossimLocalTmFormatSepSpace, ossimLocalTmFormatYearFirst, pDate(), pMonth(), pYear(), and x.

Referenced by print(), and ossimDate::print().

280 {
281  std::ostringstream pTmp;
282 
283  static const char * _days[] =
284  {
285  "Sunday", "Monday", "Tuesday", "Wednesday",
286  "Thursday", "Friday", "Saturday"
287  };
288 
289  if (fmt & ossimLocalTmFormatDayOfWeek)
290  {
291  int day = tm_wday % 7;
292  char const * p = _days[day];
293  if (fmt & ossimLocalTmFormatPadDay)
294  for (int x = 0; x < 3; ++x)
295  pTmp << p[x];
296  else
297  {
298  pTmp << p;
299  if (fmt & ossimLocalTmFormatDMY)
300  pTmp << ',';
301  }
303  pTmp << ' ';
304  }
305  if (fmt & ossimLocalTmFormatYearFirst)
306  pYear (pTmp, fmt);
307  if (fmt & ossimLocalTmFormatMonFirst)
308  pMonth (pTmp, fmt);
309  pDate (pTmp, fmt);
310  if (!(fmt & ossimLocalTmFormatMonFirst))
311  pMonth (pTmp, fmt);
312  if (!(fmt & ossimLocalTmFormatYearFirst))
313  pYear (pTmp, fmt);
314 
315  return os << pTmp.str();
316 }
ossim_uint32 x
void pDate(std::ostream &os, int fmt) const
Definition: ossimDate.cpp:214
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
void pYear(std::ostream &os, int fmt) const
Definition: ossimDate.cpp:147
void pMonth(std::ostream &os, int fmt) const
Definition: ossimDate.cpp:175

◆ printTime()

std::ostream & ossimLocalTm::printTime ( std::ostream &  os,
int  f = timefmt 
) const

Definition at line 418 of file ossimDate.cpp.

References ossimTimeFormatAmPm, pHour(), pMins(), and pSecs().

Referenced by print(), and ossimTime::print().

419 {
420  std::ostringstream pTmp;
421  pHour (pTmp, fmt);
422  pMins (pTmp, fmt);
423  pSecs (pTmp, fmt);
424  if (fmt & ossimTimeFormatAmPm)
425  {
426  pTmp << (tm_hour > 11 ? "pm" : "am");
427  }
428 
429  return os << pTmp.str();
430 }
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
void pSecs(std::ostream &os, int fmt) const
Definition: ossimDate.cpp:396
void pHour(std::ostream &os, int fmt) const
Definition: ossimDate.cpp:355
void pMins(std::ostream &os, int fmt) const
Definition: ossimDate.cpp:376

◆ pSecs()

void ossimLocalTm::pSecs ( std::ostream &  os,
int  fmt 
) const
protected

Definition at line 396 of file ossimDate.cpp.

References ossimTimeFormatAmPm, ossimTimeFormatHour, ossimTimeFormatMins, ossimTimeFormatPadSecs, ossimTimeFormatSecs, ossimTimeFormatSepAbbrev, ossimTimeFormatSepChar, ossimTimeFormatSepSpace, ossimTimeFormatZeroSecs, and tSfx().

Referenced by printTime().

397 {
398  if (fmt & ossimTimeFormatSecs)
399  {
400  int sec = tm_sec;
401  int dig = 2;
403  {
404  sec += ((tm_hour * 60) + tm_min) + 60;
405  dig += 3;
406  }
407  os << std::setw((fmt & ossimTimeFormatPadSecs) ? dig : 0);
408  os << std::setfill((fmt & ossimTimeFormatZeroSecs) ? '0' : ' ');
409  os << sec;
410  if (fmt & ossimTimeFormatAmPm)
411  fmt &= ~ossimTimeFormatSepChar;
412  else
414  tSfx (os, fmt, 's');
415  }
416 }
void tSfx(std::ostream &os, int fmt, char ch) const
Definition: ossimDate.cpp:345

◆ pYear()

void ossimLocalTm::pYear ( std::ostream &  os,
int  fmt 
) const
protected

Definition at line 147 of file ossimDate.cpp.

References dSfx(), ossimLocalTmFormatPadYear, ossimLocalTmFormatSepChar, ossimLocalTmFormatSepSpace, ossimLocalTmFormatYear, ossimLocalTmFormatYearFirst, ossimLocalTmFormatYearShort, and ossimLocalTmFormatZeroYear.

Referenced by printDate().

148 {
149  if (fmt & ossimLocalTmFormatYear)
150  {
151  int year = tm_year;
152  int dig;
153  if (fmt & ossimLocalTmFormatYearShort)
154  {
155  dig = 2;
156  year %= 100;
157  }
158  else
159  {
160  dig = 4;
161  if (year < 200)
162  year += 1900;
163  }
164  os << std::setw((fmt & ossimLocalTmFormatPadYear) ? dig : 0);
165  os << std::setfill((fmt & ossimLocalTmFormatZeroYear) ? '0' : ' ');
166  os << year;
167  if ((fmt & ossimLocalTmFormatYearFirst))
168  {
170  dSfx (os, fmt);
171  }
172  }
173 }
void dSfx(std::ostream &os, int fmt) const
Definition: ossimDate.cpp:139

◆ saveXml()

ossimRefPtr< ossimXmlNode > ossimLocalTm::saveXml ( ) const

Definition at line 1016 of file ossimDate.cpp.

References ossimXmlNode::addAttribute(), ossimXmlNode::addChildNode(), ossimRefPtr< T >::get(), getDay(), getFractionalSecond(), getHour(), getMin(), getMonth(), getSec(), getYear(), ossimXmlNode::setTag(), and ossimString::toString().

1017 {
1019 
1020  result->setTag("ossimDate");
1021  result->addAttribute("version", "1");
1022  result->addChildNode("month", ossimString::toString(getMonth()));
1023  result->addChildNode("day", ossimString::toString(getDay()));
1024  result->addChildNode("year", ossimString::toString(getYear()));
1025  result->addChildNode("hour", ossimString::toString(getHour()));
1026  result->addChildNode("minutes", ossimString::toString(getMin()));
1027  result->addChildNode("seconds", ossimString::toString(getSec()));
1028  result->addChildNode("fractionalSecond", ossimString::toString(getFractionalSecond()));
1029 
1030  return result.get();
1031 }
void setTag(const ossimString &tag)
int getSec() const
Definition: ossimDate.cpp:580
static ossimString toString(bool aValue)
Numeric to string methods.
int getYear() const
Definition: ossimDate.cpp:433
int getMin() const
Definition: ossimDate.cpp:575
double getFractionalSecond() const
Definition: ossimDate.cpp:585
int getMonth() const
Definition: ossimDate.cpp:448
int getDay() const
Definition: ossimDate.cpp:453
void addAttribute(ossimRefPtr< ossimXmlAttribute > attribute)
int getHour() const
Definition: ossimDate.cpp:570
void addChildNode(ossimRefPtr< ossimXmlNode > node)

◆ setDateFromJulian()

ossimLocalTm & ossimLocalTm::setDateFromJulian ( double  jd)

Definition at line 504 of file ossimDate.cpp.

References n, setDay(), setFractionalDay(), setMonth(), and setYear().

Referenced by addDays(), addHours(), addMinutes(), addSeconds(), loadXml(), and setDateFromModifiedJulian().

505 {
506  double fractional = jd - (long)jd;
507  long l;
508  long n;
509  long i;
510  long j;
511  long k;
512 
513 
514  l= (long)(jd+68569);
515  n= 4*l/146097;
516  l= l-(146097*n+3)/4;
517  i= 4000*(l+1)/1461001;
518  l= l-1461*i/4+31l;
519  j= 80*l/2447;
520  k= l-2447*j/80;
521  l= j/11;
522  j= j+2-12*l;
523  i= 100*(n-49)+i+l;
524  setDay(k);
525  setMonth(j);
526  setYear(i);
527 
528  setFractionalDay(fractional);
529 
530  return *this;
531 }
ossimLocalTm & setDay(int day)
Definition: ossimDate.cpp:476
os2<< "> n<< " > nendobj n
ossimLocalTm & setMonth(int month)
Definition: ossimDate.cpp:483
ossimLocalTm & setYear(int year)
Definition: ossimDate.cpp:490
void setFractionalDay(double fractionalDay)
Definition: ossimDate.cpp:540

◆ setDateFromModifiedJulian()

ossimLocalTm & ossimLocalTm::setDateFromModifiedJulian ( double  mjd)

Definition at line 533 of file ossimDate.cpp.

References setDateFromJulian().

Referenced by loadXml().

534 {
535  setDateFromJulian(mjd + 2400000.5);
536 
537  return *this;
538 }
ossimLocalTm & setDateFromJulian(double jd)
Definition: ossimDate.cpp:504

◆ setDay()

ossimLocalTm & ossimLocalTm::setDay ( int  day)

Definition at line 476 of file ossimDate.cpp.

Referenced by loadXml(), ossimDate::ossimDate(), setDateFromJulian(), and ossimDateProperty::setValue().

477 {
478  tm_mday = day;
479 
480  return *this;
481 }

◆ setFloatSec()

ossimLocalTm & ossimLocalTm::setFloatSec ( double  s)

Definition at line 611 of file ossimDate.cpp.

References setFractionalSecond().

612 {
613  tm_sec = (int)s;
614  return setFractionalSecond(s-tm_sec);
615 }
ossimLocalTm & setFractionalSecond(double fractS)
Definition: ossimDate.cpp:617

◆ setFractionalDay()

void ossimLocalTm::setFractionalDay ( double  fractionalDay)

Definition at line 540 of file ossimDate.cpp.

References extractHmsFromFractionalDay(), setFractionalSecond(), setHour(), setMin(), and setSec().

Referenced by setDateFromJulian().

541 {
542  int h, m, s;
543  double fractionalSecond;
544  extractHmsFromFractionalDay(fractionalDay, h, m, s, fractionalSecond);
545 
546  setHour(h);
547  setMin(m);
548  setSec(s);
549  setFractionalSecond(fractionalSecond);
550 }
ossimLocalTm & setFractionalSecond(double fractS)
Definition: ossimDate.cpp:617
ossimLocalTm & setHour(int h)
Definition: ossimDate.cpp:590
ossimLocalTm & setSec(int s)
Definition: ossimDate.cpp:604
ossimLocalTm & setMin(int m)
Definition: ossimDate.cpp:597
static void extractHmsFromFractionalDay(double fractionalDay, int &h, int &m, int &s, double &fractionalSecond)
Definition: ossimDate.cpp:552

◆ setFractionalSecond()

ossimLocalTm & ossimLocalTm::setFractionalSecond ( double  fractS)

Definition at line 617 of file ossimDate.cpp.

References theFractionalSecond.

Referenced by loadXml(), ossimDate::ossimDate(), setFloatSec(), and setFractionalDay().

618 {
619  theFractionalSecond = fractionalSecond;
620 
621  return *this;
622 }
double theFractionalSecond
Definition: ossimDate.h:236

◆ setHour()

ossimLocalTm & ossimLocalTm::setHour ( int  h)

Definition at line 590 of file ossimDate.cpp.

Referenced by loadXml(), ossimDate::ossimDate(), setFractionalDay(), and ossimDateProperty::setValue().

591 {
592  tm_hour = h;
593 
594  return *this;
595 }

◆ setIso8601()

bool ossimLocalTm::setIso8601 ( const std::string &  timeString,
bool  shiftToGmtOffsetZero = false 
)

Definition at line 789 of file ossimDate.cpp.

References now().

Referenced by ossimplugins::ossim::iso8601TimeStringToCivilDate().

790 {
791  ossimDate now;
792  std::string::size_type pos = 0;
793  ossim_int32 year = 0;
794  ossim_int32 month = 0;
795  ossim_int32 day = 0;
796  ossim_int32 timeZoneOffset = 0;
797 
798  if(timeString[0] != 'T') // make sure it's not time only
799  {
800  // look for year
801  //
802  if(readIntegerFromString(year,
803  timeString,
804  pos,
805  4))
806  {
807  // retrieved the year portion
808  // now check for separator not digit
809  //
810 
811  // we at least have a year
812  // now check for others
813  setYear(year);
814  if(!isdigit(timeString[pos]))
815  {
816  // skip separator
817  ++pos;
818  }
819  if(readIntegerFromString(month,
820  timeString,
821  pos,
822  2))
823 
824  {
825  setMonth(month);
826  if(!isdigit(timeString[pos]))
827  {
828  // skip separator
829  ++pos;
830  }
831  if(readIntegerFromString(day,
832  timeString,
833  pos,
834  2))
835  {
836  setDay(day);
837  }
838  }
839  }
840  else
841  {
842  return false;
843  }
844  }
845  else // set year month day to current
846  {
847  setYear(now.getYear());
848  setMonth(now.getMonth());
849  setDay(now.getDay());
850  }
851  // check to see if we need to read time portion
852  if(timeString[pos] == 'T')
853  {
854  ++pos; // skip T character
855  ossim_int32 hours=0, minutes=0;
856 
857  if(readIntegerFromString(hours,
858  timeString,
859  pos,
860  2))
861  {
862  setHour(hours);
863 
864  // now check for separator
865  if(!std::isdigit(timeString[pos]))
866  {
867  ++pos; // skip separator if present
868  }
869  if(readIntegerFromString(minutes,
870  timeString,
871  pos,
872  2))
873  {
874  setMin(minutes);
875  // now check for time zone if only a hour minute time
876  //
877  if(timeString[pos] == 'Z')
878  {
879  std::time_t t = mktime(this);
880  t += m_timezoneOffset*3600;
881  setTimeGivenEpoc(t);
882  }
883  else if(!readTimeZoneOffset(timeZoneOffset,
884  timeString,
885  pos))
886  {
887  double fractionalSeconds = 0.0;
888  if(!std::isdigit(timeString[pos]))
889  {
890  ++pos;
891  }
892  std::string::size_type endPos = timeString.find_first_not_of("0123456789.", pos);
893  if(endPos == std::string::npos)
894  {
895  fractionalSeconds = ossimString(timeString.begin()+pos,
896  timeString.end()).toDouble();
897  }
898  else
899  {
900  fractionalSeconds = ossimString(timeString.begin()+pos,
901  timeString.begin()+endPos).toDouble();
902  }
903  setFloatSec(fractionalSeconds);
904  pos = endPos;
905  if(pos == std::string::npos)
906  {
907  // we will not be too strict so if at the end then just return we got enough
908  return true;
909  }
910  if(timeString[pos] == 'Z')
911  {
912  std::time_t t = mktime(this);
913  t += m_timezoneOffset*3600;
914  setTimeGivenEpoc(t);
915  //std::cout << "OFFSET == " << m_timezoneOffset << std::endl;
916  }
917  else
918  {
919  readTimeZoneOffset(timeZoneOffset,
920  timeString,
921  pos);
922  }
923  }
924  }
925  }
926  else
927  {
928  // need at least hours
929  return false;
930  }
931  }
932  else if(std::isdigit(timeString[pos]))
933  {
934  ossim_int32 hours=0, minutes=0;
935 
936  if(readIntegerFromString(hours,
937  timeString,
938  pos,
939  2))
940  {
941  setHour(hours);
942 
943  // now check for separator
944  if(!std::isdigit(timeString[pos]))
945  {
946  ++pos; // skip separator if present
947  }
948  if(readIntegerFromString(minutes,
949  timeString,
950  pos,
951  2))
952  {
953  setMin(minutes);
954 
955  if(!readTimeZoneOffset(timeZoneOffset,
956  timeString,
957  pos))
958  {
959  double fractionalSeconds = 0.0;
960  if(!std::isdigit(timeString[pos]))
961  {
962  ++pos;
963  }
964  std::string::size_type endPos = timeString.find_first_not_of("0123456789.", pos);
965  if(endPos == std::string::npos)
966  {
967  fractionalSeconds = ossimString(timeString.begin()+pos,
968  timeString.end()).toDouble();
969  }
970  else
971  {
972  fractionalSeconds = ossimString(timeString.begin()+pos,
973  timeString.begin()+endPos).toDouble();
974  }
975  setFloatSec(fractionalSeconds);
976  pos = endPos;
977  if(pos == std::string::npos)
978  {
979  // we will not be too strict so if at the end then just return we got enough
980  return true;
981  }
982  if(timeString[pos] == 'Z')
983  {
984  // For proper readouts we need to shift
985  // to current time zone of the system
986  //
987  //std::cout << "OFFSET == " << m_timezoneOffset << std::endl;
988 
989  std::time_t t = mktime(this);
990  t += m_timezoneOffset*3600;
991  setTimeGivenEpoc(t);
992  }
993  else
994  {
995  readTimeZoneOffset(timeZoneOffset,
996  timeString,
997  pos);
998  }
999  }
1000  }
1001  }
1002  }
1003  else
1004  {
1005  // need at least hours
1006  return false;
1007  }
1008 
1009  if(shiftToGmtOffsetZero && (timeZoneOffset!=0))
1010  {
1011  addSeconds(-timeZoneOffset);
1012  }
1013  return true;
1014 }
ossimLocalTm & setDay(int day)
Definition: ossimDate.cpp:476
void addSeconds(ossim_float64 n)
Definition: ossimDate.cpp:636
ossimLocalTm & setFloatSec(double s)
Definition: ossimDate.cpp:611
ossimLocalTm & setMonth(int month)
Definition: ossimDate.cpp:483
ossimLocalTm & setYear(int year)
Definition: ossimDate.cpp:490
int m_timezoneOffset
Definition: ossimDate.h:237
ossimLocalTm & setHour(int h)
Definition: ossimDate.cpp:590
ossimLocalTm & setMin(int m)
Definition: ossimDate.cpp:597
void setTimeGivenEpoc(time_t ticks)
Will adjust for timezone.
Definition: ossimDate.cpp:722
int ossim_int32

◆ setMin()

ossimLocalTm & ossimLocalTm::setMin ( int  m)

Definition at line 597 of file ossimDate.cpp.

Referenced by loadXml(), ossimDate::ossimDate(), setFractionalDay(), and ossimDateProperty::setValue().

598 {
599  tm_min = m;
600 
601  return *this;
602 }

◆ setMonth()

ossimLocalTm & ossimLocalTm::setMonth ( int  month)

The month is a number bewteen 1 and 12. We will shift it to the internal representation

Definition at line 483 of file ossimDate.cpp.

Referenced by loadXml(), ossimDate::ossimDate(), setDateFromJulian(), and ossimDateProperty::setValue().

484 {
485  tm_mon = month - 1;
486 
487  return *this;
488 }

◆ setSec()

ossimLocalTm & ossimLocalTm::setSec ( int  s)

Definition at line 604 of file ossimDate.cpp.

Referenced by loadXml(), ossimDate::ossimDate(), setFractionalDay(), and ossimDateProperty::setValue().

605 {
606  tm_sec = s;
607 
608  return *this;
609 }

◆ setTimeGivenEpoc()

void ossimLocalTm::setTimeGivenEpoc ( time_t  ticks)

Will adjust for timezone.

The passed in value is based on seconds.

Definition at line 722 of file ossimDate.cpp.

References m_mutex.

723 {
724  std::lock_guard<std::mutex> lock(m_mutex);
725  *this = *localtime(&ticks);
726 }
static std::mutex m_mutex
Definition: ossimDate.h:235

◆ setTimeNoAdjustmentGivenEpoc()

void ossimLocalTm::setTimeNoAdjustmentGivenEpoc ( time_t  ticks)

Will not adjust for timezone.

The passed in value is based on seconds.

Definition at line 716 of file ossimDate.cpp.

References m_mutex.

717 {
718  std::lock_guard<std::mutex> lock(m_mutex);
719  *this = *gmtime(&ticks);
720 }
static std::mutex m_mutex
Definition: ossimDate.h:235

◆ setTimezoneOffsetFromGmt()

void ossimLocalTm::setTimezoneOffsetFromGmt ( )
protected

Definition at line 230 of file ossimDate.cpp.

References m_mutex, and m_timezoneOffset.

Referenced by ossimLocalTm().

231 {
232  m_mutex.lock();
233  // struct tm gmt = *this;
234 #if !defined(_MSC_VER)
235  tzset();
236 #else
237  _tzset();
238 #endif
239 
240 #if ( defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) )
241  //gmt.tm_sec -= tm_gmtoff; // Seconds east of UTC
242  m_timezoneOffset = tm_gmtoff;
243 #elif (defined(WIN32))
244  long timezoneOffset=0;
245  _get_timezone(&timezoneOffset);
246  //m_timezoneOffset = timezone; // Seconds west of UTC
247  if ( tm_isdst )
248  {
249  timezoneOffset -= 3600; // Subtract an hour.
250  }
251  m_timezoneOffset = -timezoneOffset;
252 #else
253  m_timezoneOffset = timezone; // Seconds west of UTC
254  if ( tm_isdst )
255  {
256  m_timezoneOffset -= 3600; // Subtract an hour.
257  }
259 #endif
260  m_mutex.unlock();
261 
263 }
static std::mutex m_mutex
Definition: ossimDate.h:235
int m_timezoneOffset
Definition: ossimDate.h:237

◆ setYear()

ossimLocalTm & ossimLocalTm::setYear ( int  year)

Definition at line 490 of file ossimDate.cpp.

Referenced by loadXml(), ossimDate::ossimDate(), setDateFromJulian(), and ossimDateProperty::setValue().

491 {
492  if(year < 2099)
493  {
494  tm_year = year - 1900;
495  }
496  else
497  {
498  tm_year = year;
499  }
500 
501  return *this;
502 }

◆ tSfx()

void ossimLocalTm::tSfx ( std::ostream &  os,
int  fmt,
char  ch 
) const
protected

Definition at line 345 of file ossimDate.cpp.

References ossimTimeFormatSepAbbrev, ossimTimeFormatSepChar, ossimTimeFormatSepSpace, and timech.

Referenced by pHour(), pMins(), and pSecs().

346 {
347  if (fmt & ossimTimeFormatSepAbbrev)
348  os << ch;
349  if (fmt & ossimTimeFormatSepChar)
350  os << timech;
351  if (fmt & ossimTimeFormatSepSpace)
352  os << ' ';
353 }
static char timech
Definition: ossimDate.h:119

Friends And Related Function Documentation

◆ operator!=

OSSIM_DLL int operator!= ( const ossimLocalTm t1,
const ossimLocalTm src 
)
friend

Definition at line 35 of file ossimDate.cpp.

36 {
37  return int(t1.compare(t2) != 0);
38 }
int compare(ossimLocalTm const &t) const
Definition: ossimDate.cpp:104

◆ operator<

OSSIM_DLL int operator< ( const ossimLocalTm t1,
const ossimLocalTm src 
)
friend

Definition at line 40 of file ossimDate.cpp.

41 {
42  return int(t1.compare(t2) < 0);
43 }
int compare(ossimLocalTm const &t) const
Definition: ossimDate.cpp:104

◆ operator<<

OSSIM_DLL std::ostream& operator<< ( std::ostream &  out,
const ossimLocalTm src 
)
friend

Definition at line 25 of file ossimDate.cpp.

26 {
27  return t.print(os);
28 }

◆ operator<=

OSSIM_DLL int operator<= ( const ossimLocalTm t1,
const ossimLocalTm src 
)
friend

Definition at line 45 of file ossimDate.cpp.

46 {
47  return int(t1.compare(t2) <= 0);
48 }
int compare(ossimLocalTm const &t) const
Definition: ossimDate.cpp:104

◆ operator==

OSSIM_DLL int operator== ( const ossimLocalTm t1,
const ossimLocalTm src 
)
friend

Definition at line 30 of file ossimDate.cpp.

31 {
32  return int(t1.compare(t2) == 0);
33 }
int compare(ossimLocalTm const &t) const
Definition: ossimDate.cpp:104

◆ operator>

OSSIM_DLL int operator> ( const ossimLocalTm t1,
const ossimLocalTm src 
)
friend

Definition at line 50 of file ossimDate.cpp.

51 {
52  return int(t1.compare(t2) > 0);
53 }
int compare(ossimLocalTm const &t) const
Definition: ossimDate.cpp:104

◆ operator>=

OSSIM_DLL int operator>= ( const ossimLocalTm t1,
const ossimLocalTm src 
)
friend

Definition at line 55 of file ossimDate.cpp.

56 {
57  return int(t1.compare(t2) >= 0);
58 }
int compare(ossimLocalTm const &t) const
Definition: ossimDate.cpp:104

Member Data Documentation

◆ datech

char ossimLocalTm::datech = '/'
static

Definition at line 120 of file ossimDate.h.

Referenced by dSfx().

◆ datefmt

int ossimLocalTm::datefmt = ossimLocalTm::ossimLocalTmFormatFull
static

Definition at line 121 of file ossimDate.h.

◆ m_mutex

std::mutex ossimLocalTm::m_mutex
staticprotected

◆ m_timezoneOffset

int ossimLocalTm::m_timezoneOffset
mutableprotected

Definition at line 237 of file ossimDate.h.

Referenced by convertToGmt(), and setTimezoneOffsetFromGmt().

◆ theFractionalSecond

double ossimLocalTm::theFractionalSecond
protected

Definition at line 236 of file ossimDate.h.

Referenced by dump(), getFractionalSecond(), getJulian(), operator=(), and setFractionalSecond().

◆ timech

char ossimLocalTm::timech = ':'
static

Definition at line 119 of file ossimDate.h.

Referenced by tSfx().

◆ timefmt

int ossimLocalTm::timefmt = ossimLocalTm::ossimTimeFormatInternational
static

Definition at line 122 of file ossimDate.h.


The documentation for this class was generated from the following files: