OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimDate.h
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: MIT
4 //
5 // See LICENSE.txt file in the top level directory for more details.
6 //
7 // Author: Garrett Potts
8 //
9 //*************************************************************************
10 // $Id: ossimDate.h 22765 2014-05-08 15:20:10Z gpotts $
11 #ifndef ossimDate_HEADER
12 #define ossimDate_HEADER
13 #include <ctime>
14 #include <iosfwd>
17 #include <mutex>
18 
19 class OSSIM_DLL ossimLocalTm : public std::tm
20 {
21 public:
22  friend OSSIM_DLL std::ostream& operator<<(std::ostream& out, const ossimLocalTm& src);
23  friend OSSIM_DLL int operator== (const ossimLocalTm& t1,
24  const ossimLocalTm& src);
25  friend OSSIM_DLL int operator!= (const ossimLocalTm& t1,
26  const ossimLocalTm& src);
27  friend OSSIM_DLL int operator< (const ossimLocalTm& t1,
28  const ossimLocalTm& src);
29  friend OSSIM_DLL int operator<= (const ossimLocalTm& t1,
30  const ossimLocalTm& src);
31  friend OSSIM_DLL int operator> (const ossimLocalTm& t1,
32  const ossimLocalTm& src);
33  friend OSSIM_DLL int operator>= (const ossimLocalTm& t1,
34  const ossimLocalTm& src);
35 
36  ossimLocalTm (time_t t=0); // Set to time, 0 is magic for 'now'
37  ossimLocalTm (tm const & t); // Copy constructor
38  ossimLocalTm (const ossimLocalTm& t); // Copy constructor
39 
40  ossimLocalTm & operator= (tm const & t); // Assignment
41  ossimLocalTm & operator= (const ossimLocalTm & t); // Assignment
42  operator time_t (void) const; // Conversion operator
43 
44  int isValid (void) const; // Test for validity
45 
46  void now();
47  int compare (ossimLocalTm const & t) const; // Compare times
48  int compare (std::time_t const tt) const; // Compare times
49 
50  enum ossimLocalTmFormat // Date format flags
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
71  ossimLocalTmFormatInternational = (int)(ossimLocalTmFormatDMY|ossimLocalTmFormatMonText|ossimLocalTmFormatPadMon|
72  ossimLocalTmFormatSepSpace),
73  ossimLocalTmFormatIntlShort = (int)(ossimLocalTmFormatDMY|ossimLocalTmFormatMonText|ossimLocalTmFormatPadMon|
74  ossimLocalTmFormatSepSpace|ossimLocalTmFormatYearShort),
75  ossimLocalTmFormatUsa = (int)(ossimLocalTmFormatDMY|ossimLocalTmFormatMonFirst|ossimLocalTmFormatPadDMY|
76  ossimLocalTmFormatZeroDMY|ossimLocalTmFormatYearShort|ossimLocalTmFormatSepChar),
77  ossimLocalTmFormatEnglish = (int)(ossimLocalTmFormatDMY|ossimLocalTmFormatYearShort|ossimLocalTmFormatPadDMY|
78  ossimLocalTmFormatZeroDMY|ossimLocalTmFormatSepChar),
79  ossimLocalTmFormatJapanese = (int)(ossimLocalTmFormatDMY|ossimLocalTmFormatYearFirst|ossimLocalTmFormatPadDMY|
80  ossimLocalTmFormatZeroDMY|ossimLocalTmFormatYearShort|ossimLocalTmFormatMonFirst|
81  ossimLocalTmFormatSepChar),
82  ossimLocalTmFormatFull = (int)(ossimLocalTmFormatDMY|ossimLocalTmFormatDayOfWeek|ossimLocalTmFormatMonText|
83  ossimLocalTmFormatSepSpace)
84  };
85 
86  enum ossimTimeFormat // Time format (nb: time zones not implemented)
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'
107  ossimTimeFormatInternational = (int)(ossimTimeFormatHourAll|ossimTimeFormatMinsAll|ossimTimeFormatSecsAll|
108  ossimTimeFormat24hour|ossimTimeFormatSepChar),
109  ossimTimeFormatShortTime = (int)(ossimTimeFormatHourAll|ossimTimeFormatMinsAll|ossimTimeFormat24hour|
110  ossimTimeFormatSepChar),
111  ossimTimeFormatClockTime = (int)(ossimTimeFormatHour|ossimTimeFormatPadHour|ossimTimeFormatMinsAll|
112  ossimTimeFormatAmPm|ossimTimeFormatSepChar),
113  ossimTimeFormatLongTime = (int)(ossimTimeFormatHour|ossimTimeFormatPadHour|ossimTimeFormatMinsAll|
114  ossimTimeFormatSecsAll|ossimTimeFormatSepAbbrev|ossimTimeFormatSepSpace),
115  ossimTimeFormatMillitary = (int)(ossimTimeFormatHourAll|ossimTimeFormatMinsAll|ossimTimeFormat24hour)
116  };
117 
118 
119  static char timech; // Character used for time separator
120  static char datech; // Character used for date separator
121  static int datefmt; // Default date format
122  static int timefmt; // Default time format
123 
124  // Output methods
126  int df =datefmt,
127  int tf =timefmt) const;
128  std::ostream& printTime(std::ostream & os, int f =timefmt) const;
129  std::ostream& printDate(std::ostream & os, int f =datefmt) const;
130 
142  std::ostream& dump(std::ostream& os) const;
143 
144 
145  int getYear()const;
146 
147  int getShortYear()const;
148 
152  int getMonth()const;
153 
157  int getDay()const;
158  double getJulian()const;
159  double getModifiedJulian()const;
160 
161  ossimLocalTm& setDay(int day);
166  ossimLocalTm& setMonth(int month);
167  ossimLocalTm& setYear(int year);
168  ossimLocalTm& setDateFromJulian(double jd);
169  ossimLocalTm& setDateFromModifiedJulian(double mjd);
170 
171  void setFractionalDay(double fractionalDay);
172  static void extractHmsFromFractionalDay(double fractionalDay,
173  int &h,
174  int &m,
175  int &s,
176  double& fractionalSecond);
177  int getHour()const;
178  int getMin()const;
179  int getSec()const;
180  double getFractionalSecond()const;
181  ossimLocalTm& setHour(int h);
182  ossimLocalTm& setMin(int m);
183  ossimLocalTm& setSec(int s);
184  ossimLocalTm& setFloatSec(double s);
185  ossimLocalTm& setFractionalSecond(double fractS);
186 
191  time_t getTicks()const;
192  time_t getEpoc()const;
193 
194  void addSeconds(ossim_float64 n);
195  void addMinutes(ossim_float64 n);
196  void addHours(ossim_float64 n);
197  void addDays(ossim_float64 n);
198 
199  ossim_float64 deltaInSeconds(const ossimLocalTm& d)const;
200  ossim_float64 deltaInMinutes(const ossimLocalTm& d)const;
201  ossim_float64 delatInHours(const ossimLocalTm& d)const;
202  ossim_float64 deltaInDays(const ossimLocalTm& d)const;
203 
204  ossimLocalTm convertToGmt()const;
208  void setTimeNoAdjustmentGivenEpoc(time_t ticks);
209 
213  void setTimeGivenEpoc(time_t ticks);
214 
215  bool setIso8601(const std::string& timeString, bool shiftToGmtOffsetZero=false);
216 
217  ossimRefPtr<ossimXmlNode> saveXml()const;
218  bool loadXml(ossimRefPtr<ossimXmlNode> dateNode);
219 
220 protected:
221  // Time suffix
222  void tSfx(std::ostream & os, int fmt, char ch) const;
223  // Time field formatters
224  void pHour(std::ostream & os, int fmt) const;
225  void pMins(std::ostream & os, int fmt) const;
226  void pSecs(std::ostream & os, int fmt) const;
227  // Date suffix
228  void dSfx(std::ostream & os, int fmt) const;
229  // Date field formatters
230  void pDate(std::ostream & os, int fmt) const;
231  void pMonth(std::ostream & os, int fmt) const;
232  void pYear(std::ostream & os, int fmt) const;
233 
234  void setTimezoneOffsetFromGmt();
235  static std::mutex m_mutex;
237  mutable int m_timezoneOffset;
238 };
239 
240 
242 {
243 public:
244  friend OSSIM_DLL std::ostream& operator<<(std::ostream& out, const ossimDate& src);
245 
246  ossimDate(int datefmt =ossimLocalTm::datefmt);
247  ossimDate (ossimLocalTm const & t,
248  int dtfmt =ossimLocalTm::datefmt);
249  ossimDate (time_t t, int dtfmt =ossimLocalTm::datefmt);
250  ossimDate(int month, int day, int year,int dtfmt=ossimLocalTm::datefmt);
251 
252  int fmt(int f);
253  int fmt(void) const;
254 
255  std::ostream & print (std::ostream & os) const;
256 
257 private:
258  int _fmt;
259 };
260 
262 {
263 public:
264  friend OSSIM_DLL std::ostream& operator<<(std::ostream& out, const ossimTime& src);
265  ossimTime(int tmfmt =ossimLocalTm::timefmt);
266  ossimTime (ossimTime const & t,
267  int tmfmt =ossimLocalTm::timefmt);
268  ossimTime (time_t t, int tmfmt =ossimLocalTm::timefmt);
269 
270  int fmt (int f);
271  int fmt (void) const;
272 
273  std::ostream& print (std::ostream & os) const;
274 
275 private:
276  int _fmt;
277 };
278 #endif
bool operator!=(const ossimRefPtr< _Tp1 > &__a, const ossimRefPtr< _Tp2 > &__b) noexcept
Definition: ossimRefPtr.h:111
std::ostream & print(std::ostream &os, int df=datefmt, int tf=timefmt) const
Definition: ossimDate.cpp:265
static char datech
Definition: ossimDate.h:120
std::ostream & print(H5::H5File *file, std::ostream &out)
Print method.
Definition: ossimH5Util.cpp:41
int _fmt
Definition: ossimDate.h:258
double ossim_float64
ostream & operator<<(ostream &out, const ossimAxes &axes)
Definition: ossimAxes.h:88
static int timefmt
Definition: ossimDate.h:122
bool operator<(const BaseMatrix &A, const BaseMatrix &)
Definition: newmat.h:1734
static std::mutex m_mutex
Definition: ossimDate.h:235
os2<< "> n<< " > nendobj n
bool operator>(const BaseMatrix &A, const BaseMatrix &)
Definition: newmat.h:1736
bool operator>=(const BaseMatrix &A, const BaseMatrix &)
Definition: newmat.h:1732
bool operator==(const ossimRefPtr< _Tp1 > &__a, const ossimRefPtr< _Tp2 > &__b) noexcept
Definition: ossimRefPtr.h:101
int m_timezoneOffset
Definition: ossimDate.h:237
#define OSSIM_DLL
friend OSSIM_DLL std::ostream & operator<<(std::ostream &out, const ossimLocalTm &src)
Definition: ossimDate.cpp:25
static char timech
Definition: ossimDate.h:119
int _fmt
Definition: ossimDate.h:276
bool operator<=(const BaseMatrix &A, const BaseMatrix &)
Definition: newmat.h:1730
double theFractionalSecond
Definition: ossimDate.h:236
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
static int datefmt
Definition: ossimDate.h:121