22 return src.
print(out);
32 return int(t1.
compare(t2) == 0);
37 return int(t1.
compare(t2) != 0);
47 return int(t1.
compare(t2) <= 0);
57 return int(t1.
compare(t2) >= 0);
68 :theFractionalSecond(0.0)
72 *(tm *)
this = *localtime(&t);
79 :theFractionalSecond(0.0)
85 :theFractionalSecond(t.theFractionalSecond)
111 time_t tx = (time_t)*
this;
112 return (tx == tt) ? 0 : (tx > tt) ? 1 : -1;
115 ossimLocalTm::operator time_t (
void)
const 117 return mktime ((tm *)
this);
124 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
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));
136 *
this = *localtime(&t);
178 static const char * _months[] =
180 "January",
"February",
"March",
"April",
181 "May",
"June",
"July",
"August",
"September",
182 "October",
"November",
"December" 187 int mon = (tm_mon % 12);
190 char const * tmon = _months[mon];
194 for (
int x = 0;
x < 3; ++
x)
234 #if !defined(_MSC_VER) 240 #if ( defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) ) 243 #elif (defined(WIN32)) 244 long timezoneOffset=0;
245 _get_timezone(&timezoneOffset);
249 timezoneOffset -= 3600;
274 return os << pTmp.str();
283 static const char * _days[] =
285 "Sunday",
"Monday",
"Tuesday",
"Wednesday",
286 "Thursday",
"Friday",
"Saturday" 291 int day = tm_wday % 7;
292 char const * p = _days[day];
294 for (
int x = 0;
x < 3; ++
x)
315 return os << pTmp.str();
321 std::ios_base::fmtflags f = os.flags();
323 os << setiosflags(ios::fixed) << setprecision(8) << setiosflags(ios::left);
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" 384 min += (tm_hour * 60);
404 sec += ((tm_hour * 60) + tm_min) + 60;
426 pTmp << (tm_hour > 11 ?
"pm" :
"am");
429 return os << pTmp.str();
435 int result = tm_year;
450 return ((tm_mon % 12)+1);
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+
494 tm_year = year - 1900;
506 double fractional = jd - (long)jd;
517 i= 4000*(l+1)/1461001;
543 double fractionalSecond;
556 double& fractionalSecond)
559 h = (int)fractionalDay;
560 fractionalDay = fractionalDay-h;
562 m = (int)fractionalDay;
563 fractionalDay = fractionalDay-m;
565 s = (int)fractionalDay;
566 fractionalDay = fractionalDay-s;
567 fractionalSecond = fractionalDay;
631 std::tm temp = *
this;
633 return mktime(&temp);
680 struct tm gmt = *
this;
681 #if !defined(_MSC_VER) 687 #if ( defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) ) 688 gmt.tm_sec -= tm_gmtoff;
689 #elif (defined(WIN32)) 690 long timezoneOffset=0;
691 _get_timezone(&timezoneOffset);
695 timezoneOffset -= 3600;
707 time_t t = mktime(&gmt);
708 std::tm localTime = *localtime(&t);
718 std::lock_guard<std::mutex> lock(
m_mutex);
719 *
this = *gmtime(&ticks);
724 std::lock_guard<std::mutex> lock(
m_mutex);
725 *
this = *localtime(&ticks);
729 static bool readIntegerFromString(
ossim_int32& result,
730 const std::string& input,
731 std::string::size_type& currentPos,
736 (currentPos < input.size()))
738 if(isdigit(input[currentPos]))
740 number += input[currentPos];
750 return (digits <= 0);
753 static bool readTimeZoneOffset(
ossim_int32& result,
754 const std::string& input,
755 std::string::size_type& currentPos)
757 bool returnValue =
false;
759 if(input[currentPos] ==
'+'||
760 input[currentPos] ==
'-')
767 if(readIntegerFromString(zoneHour,
772 if(!isdigit(input[currentPos]))
776 if(readIntegerFromString(zoneMin,
781 result = signMult*(zoneMin*60 + zoneHour*3600);
792 std::string::size_type pos = 0;
798 if(timeString[0] !=
'T')
802 if(readIntegerFromString(year,
814 if(!isdigit(timeString[pos]))
819 if(readIntegerFromString(month,
826 if(!isdigit(timeString[pos]))
831 if(readIntegerFromString(day,
852 if(timeString[pos] ==
'T')
857 if(readIntegerFromString(hours,
865 if(!std::isdigit(timeString[pos]))
869 if(readIntegerFromString(minutes,
877 if(timeString[pos] ==
'Z')
879 std::time_t t = mktime(
this);
883 else if(!readTimeZoneOffset(timeZoneOffset,
887 double fractionalSeconds = 0.0;
888 if(!std::isdigit(timeString[pos]))
892 std::string::size_type endPos = timeString.find_first_not_of(
"0123456789.", pos);
893 if(endPos == std::string::npos)
895 fractionalSeconds =
ossimString(timeString.begin()+pos,
896 timeString.end()).toDouble();
900 fractionalSeconds =
ossimString(timeString.begin()+pos,
901 timeString.begin()+endPos).toDouble();
905 if(pos == std::string::npos)
910 if(timeString[pos] ==
'Z')
912 std::time_t t = mktime(
this);
919 readTimeZoneOffset(timeZoneOffset,
932 else if(std::isdigit(timeString[pos]))
936 if(readIntegerFromString(hours,
944 if(!std::isdigit(timeString[pos]))
948 if(readIntegerFromString(minutes,
955 if(!readTimeZoneOffset(timeZoneOffset,
959 double fractionalSeconds = 0.0;
960 if(!std::isdigit(timeString[pos]))
964 std::string::size_type endPos = timeString.find_first_not_of(
"0123456789.", pos);
965 if(endPos == std::string::npos)
967 fractionalSeconds =
ossimString(timeString.begin()+pos,
968 timeString.end()).toDouble();
972 fractionalSeconds =
ossimString(timeString.begin()+pos,
973 timeString.begin()+endPos).toDouble();
977 if(pos == std::string::npos)
982 if(timeString[pos] ==
'Z')
989 std::time_t t = mktime(
this);
995 readTimeZoneOffset(timeZoneOffset,
1009 if(shiftToGmtOffsetZero && (timeZoneOffset!=0))
1020 result->
setTag(
"ossimDate");
1030 return result.
get();
1059 if(fractionalSecond.
valid())
1068 else if(modifiedJulian.
valid())
1072 else if(julian.
valid())
1129 return src.
print(out);
ossimLocalTm & setDateFromModifiedJulian(double mjd)
ossimLocalTm & setDay(int day)
void pDate(std::ostream &os, int fmt) const
void setTag(const ossimString &tag)
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
void addDays(ossim_float64 n)
ossim_float64 deltaInSeconds(const ossimLocalTm &d) const
std::ostream & print(std::ostream &os, int df=datefmt, int tf=timefmt) const
int operator==(ossimLocalTm const &t1, ossimLocalTm const &t2)
void pSecs(std::ostream &os, int fmt) const
static ossimString toString(bool aValue)
Numeric to string methods.
void addSeconds(ossim_float64 n)
void pHour(std::ostream &os, int fmt) const
void addMinutes(ossim_float64 n)
std::ostream & printTime(std::ostream &os, int f=timefmt) const
const ossimRefPtr< ossimXmlNode > & findFirstNode(const ossimString &rel_xpath) const
void setTimezoneOffsetFromGmt()
void pMins(std::ostream &os, int fmt) const
int operator!=(ossimLocalTm const &t1, ossimLocalTm const &t2)
void pYear(std::ostream &os, int fmt) const
ossim_int32 toInt32() const
ossimRefPtr< ossimXmlNode > saveXml() const
std::ostream & dump(std::ostream &os) const
method to dump all the data members.
ossimLocalTm & setFloatSec(double s)
const ossimString & getText() const
ossim_float64 deltaInDays(const ossimLocalTm &d) const
int operator>(ossimLocalTm const &t1, ossimLocalTm const &t2)
static std::mutex m_mutex
ossim_float64 deltaInMinutes(const ossimLocalTm &d) const
ossimLocalTm & setFractionalSecond(double fractS)
void tSfx(std::ostream &os, int fmt, char ch) const
ossimLocalTm convertToGmt() const
std::ostream & print(std::ostream &os) const
void setTimeNoAdjustmentGivenEpoc(time_t ticks)
Will not adjust for timezone.
os2<< "> n<< " > nendobj n
ossimLocalTm & setMonth(int month)
int compare(ossimLocalTm const &t) const
ossim_float64 delatInHours(const ossimLocalTm &d) const
ossimLocalTm & setYear(int year)
ossimLocalTm & setHour(int h)
bool loadXml(ossimRefPtr< ossimXmlNode > dateNode)
ossimLocalTm & setSec(int s)
double getFractionalSecond() const
void addHours(ossim_float64 n)
void setFractionalDay(double fractionalDay)
int operator<=(ossimLocalTm const &t1, ossimLocalTm const &t2)
ossimLocalTm & setDateFromJulian(double jd)
bool setIso8601(const std::string &timeString, bool shiftToGmtOffsetZero=false)
std::ostream & print(std::ostream &os) const
ossimLocalTm & setMin(int m)
void setTimeGivenEpoc(time_t ticks)
Will adjust for timezone.
int operator>=(ossimLocalTm const &t1, ossimLocalTm const &t2)
std::ostream & printDate(std::ostream &os, int f=datefmt) const
void addAttribute(ossimRefPtr< ossimXmlAttribute > attribute)
static void extractHmsFromFractionalDay(double fractionalDay, int &h, int &m, int &s, double &fractionalSecond)
void dSfx(std::ostream &os, int fmt) const
ossimLocalTm & operator=(tm const &t)
std::ostream & operator<<(std::ostream &out, const ossimDate &src)
ossimDate(int datefmt=ossimLocalTm::datefmt)
void addChildNode(ossimRefPtr< ossimXmlNode > node)
ossimTime(int tmfmt=ossimLocalTm::timefmt)
double theFractionalSecond
std::basic_ostream< char > ostream
Base class for char output streams.
time_t getTicks() const
getTicks() will call getEpoc.
int operator<(ossimLocalTm const &t1, ossimLocalTm const &t2)
double getModifiedJulian() const
void pMonth(std::ostream &os, int fmt) const