commore  1.0.6-SNAPSHOT
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Time.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2006-2014 Raphael David / CANTOR
3 //
4 
5 #ifndef CMR_TIME_INCLUDED
6 #define CMR_TIME_INCLUDED
7 
8 #include <time.h>
9 #include "Commore.h"
10 #include "AString.h"
11 
12 
13 struct timeval;
14 struct _FILETIME;
15 
16 namespace commore
17 {
22  {
23  friend class Date;
24  friend class Time;
25  friend class TimeDate;
26 
27  public:
28  //
29  TimePeriod();
35  TimePeriod(Long seconds, long num_ms_or_um = 0L/*milli or mircroseconds*/, bool is_millisecond = true);
44  TimePeriod(long days, long hours, long minutes, long seconds,
45  long num_ms_or_um = 0L, bool is_millisecond = true);
49  TimePeriod(const timeval& time);
50  TimePeriod(const TimePeriod& original);
51 
52  TimePeriod& operator=(const Long& time);
53  TimePeriod& operator=(const timeval& time);
54  TimePeriod& operator=(const TimePeriod& original);
55 
56  operator timeval() const;
57 
58  public:
62  long to_days() const;
66  long to_hours() const;
70  long to_minutes() const;
74  long to_seconds() const;
75 
79  long days() const;
83  long hours() const;
87  long minutes() const;
91  long seconds() const;
95  long microseconds() const;
99  long milliseconds() const;
103  Long to_microseconds() const;
107  Long to_milliseconds() const;
108 
109 
116  void time_period(Long seconds, long num_ms_or_um = 0L, bool is_millisecond = true);
117 
127  void time_period(long days, long hours, long minutes,
128  long seconds, long num_ms_or_um = 0L, bool is_millisecond = true);
129 
134  void time_period(const timeval& time);
135 
139  TimePeriod operator+(const TimePeriod& time) const;
140  TimePeriod operator-(const TimePeriod& time) const;
141  TimePeriod operator-() const;
142  TimePeriod& operator+=(const TimePeriod& time);
143  TimePeriod& operator-=(const TimePeriod& time);
144  TimePeriod operator*(long value) const;
145  TimePeriod operator/(long value) const;
146  TimePeriod operator%(long value) const;
147  TimePeriod& operator*=(long value);
148  TimePeriod& operator/=(long value);
149  TimePeriod& operator%=(long value);
150  bool operator<(const TimePeriod& time) const;
151  bool operator<=(const TimePeriod& time) const;
152  bool operator>(const TimePeriod& time) const;
153  bool operator>=(const TimePeriod& time) const;
154  bool operator==(const TimePeriod& time) const;
155  bool operator!=(const TimePeriod& time) const;
156  int compare(const TimePeriod& p) const;
158 
162  AString to_string() const;
166  AString to_string_full_precision() const;
171  bool from_string(const AChar* s);
175  void write(OBStream& stream) const;
179  long read_xml(IBStream& stream);
183  long write_xml(OBStream& stream) const;
184 
185 
189  long read(const CommBuffer& buf);
193  long write(CommBuffer& buf) const;
194 
195  public:
200  static bool is_microsecond(long microsecond);
201 
202  private:
203  void normalize_time_period();
204 
205  private:
206  Long seconds_;
207  long microseconds_;
208  };
209 
210 
211 
212  const long microseconds_in_second = 1000000L;
213  const long milliseconds_in_second = 1000L;
214  const long max_microsecond = 999999;
215  const long min_microsecond = 0;
216  const long max_millisecond = 999;
217  const long min_millisecond = 0;
218  const int seconds_in_minute = 60;
219  const int minutes_in_hour = 60;
220  const int hours_in_day = 24;
221  const int seconds_in_hour = 3600;
222  const long seconds_in_day = 86400;
223  const int days_in_week = 7;
224  const long seconds_in_week = 604800;
225 
226  const int days_in_year = 365;
227  const int days_in_leap_year = 366;
228  const int months_in_year = 12;
229 
230  typedef unsigned short week_t;
231  typedef unsigned short weekday_t;
232  typedef unsigned short month_t;
233  typedef unsigned short day_t;
234  typedef short year_t;
235 
236  typedef unsigned short hour_t;
237  typedef unsigned short minute_t;
238  typedef unsigned short second_t;
239  typedef unsigned long usecond_t;
240 
242  {
251  };
252 
256  CMREXD const char* which_one_name(which_one which);
257 
262  {
263  public:
264 
265  TimeDate();
276  TimeDate(int year, int month, int day, int hour, int min,
277  int second = 0, int num_ms_or_um = 0, bool is_millisecond = true);
281  TimeDate(const TimePeriod& period);
282 
283  TimeDate(const tm& tm_struct, usecond_t microsecond = 0);
284  TimeDate(const _FILETIME& time);
288  TimeDate(const time_t seconds);
289  TimeDate(const TimeDate& time_and_date);
290 
291  TimeDate& operator=(const TimeDate& time_and_date);
292  TimeDate& operator=(const tm& tm_struct);
293  TimeDate& operator=(const AString& text);
294 
295  operator tm() const;
296 
297  public:
301  void set_time_and_date(int year, int month, int day, int hour, int min,
302  int second = 0, int num_ms_or_um = 0, bool is_millisecond = true);
303  void set_time_and_date(const tm& tm_struct, usecond_t microsecond = 0);
304  void set_time_and_date(const time_t seconds);
305  void set_time_and_date(const TimePeriod& period);
306 
310  TimePeriod get_time() const;
311  int julian_day() const;
315  void get_time_and_date(int& year, int& month, int& day,
316  int& hour, int& min, int& second,
317  int& num_ms_or_um, bool is_millisecond = true) const;
321  int get_year() const;
325  int get_month() const;
329  int get_day() const;
333  int get_hour() const;
337  int get_minute() const;
341  int get_second() const;
345  int get_millisecond() const;
349  int get_microsecond() const;
350 
355  TimeDate operator+(const TimePeriod& period) const;
356  TimeDate operator-(const TimePeriod& period) const;
357  TimeDate& operator+=(const TimePeriod& period);
358  TimeDate& operator-=(const TimePeriod& period);
359  TimeDate& operator++();
360  TimeDate operator++(int);
361  TimeDate& operator--();
362  TimeDate operator--(int);
363  TimePeriod operator-(const TimeDate& time_and_date) const;
364  bool operator==(const TimeDate& time_and_date) const;
365  bool operator!=(const TimeDate& time_and_date) const;
366  bool operator<(const TimeDate& time_and_date) const;
367  bool operator<=(const TimeDate& time_and_date) const;
368  bool operator>(const TimeDate& time_and_date) const;
369  bool operator>=(const TimeDate& time_and_date) const;
371 
375  int compare(const TimeDate& time) const;
376 
380  AString to_string(const AChar* format = 0) const;
384  void write(OBStream& stream) const;
388  long read_xml(IBStream& i);
392  long write_xml(OBStream& o) const;
396  long read(const CommBuffer& buf);
400  long write(CommBuffer& buf) const;
401 
402  public:
406  static TimeDate now();
410  static TimeDate epoch();
411 
412 
413  private:
414  static TimeDate now_if_available();
415 
416  private:
417  TimePeriod time_and_date_;
418  };
419 
420 
421 
422  const long min_julian_day = 38L;
423  const long max_julian_day = 13688960L;
424 
428  bool CMREXD sleep(TimePeriod timeout);
429 
430  inline TimeDate operator+(const TimePeriod& period, const TimeDate& time_and_date);
431 
432  inline TimeDate TimeDate::operator+(const TimePeriod& period) const
433  {
434  TimeDate td(*this);
435  return td += period;
436  }
437 
438  inline TimeDate TimeDate::operator-(const TimePeriod& period) const
439  {
440  TimeDate td(*this);
441  return td -= period;
442  }
443 
444 
445  inline bool TimeDate::operator==(const TimeDate& time_and_date) const
446  {
447  return time_and_date_ == time_and_date.time_and_date_;
448  }
449 
450  inline bool TimeDate::operator!=(const TimeDate& time_and_date) const
451  {
452  return time_and_date_ != time_and_date.time_and_date_;
453  }
454 
455  inline bool TimeDate::operator<(const TimeDate& time_and_date) const
456  {
457  return time_and_date_ < time_and_date.time_and_date_;
458  }
459 
460  inline bool TimeDate::operator<=(const TimeDate& time_and_date) const
461  {
462  return time_and_date_ <= time_and_date.time_and_date_;
463  }
464 
465 
466  inline bool TimeDate::operator>(const TimeDate& time_and_date) const
467  {
468  return time_and_date_ > time_and_date.time_and_date_;
469  }
470 
471  inline bool TimeDate::operator>=(const TimeDate& time_and_date) const
472  {
473  return time_and_date_ >= time_and_date.time_and_date_;
474  }
475 
476 
477  inline TimeDate operator+(const TimePeriod& period, const TimeDate& time_and_date)
478  {
479  return time_and_date + period;
480  }
481 }
482 
485 
486 
487 
488 #endif
Definition: Time.h:246
const long min_millisecond
Definition: Time.h:217
const int minutes_in_hour
Definition: Time.h:219
const long max_julian_day
Definition: Time.h:423
bool operator>=(const TimeDate &time_and_date) const
Definition: Time.h:471
TimePeriod operator*(long value, const TimePeriod &time)
Definition: Time.cpp:456
Definition: AString.h:39
Definition: Time.h:21
TimeDate operator-(const TimePeriod &period) const
Definition: Time.h:438
unsigned short day_t
Definition: Time.h:233
long CMREXD write_xml(const AString &sIn, OBStream &o)
Definition: AString.cpp:27
const long microseconds_in_second
Definition: Time.h:212
unsigned short minute_t
Definition: Time.h:237
bool read(IBStream &str, int &num)
Definition: Time.cpp:200
const long min_julian_day
Definition: Time.h:422
Definition: Time.h:245
const long max_millisecond
Definition: Time.h:216
unsigned long usecond_t
Definition: Time.h:239
const long min_microsecond
Definition: Time.h:215
unsigned short hour_t
Definition: Time.h:236
const int days_in_week
Definition: Time.h:223
char AChar
Definition: Type.h:65
const int days_in_year
Definition: Time.h:226
AString to_string(long number, int width=0, char pad= '0')
Definition: Time.cpp:1405
Definition: Time.h:249
#define CMREXD
Definition: Compiler.h:22
bool operator!=(const TimeDate &time_and_date) const
Definition: Time.h:450
Definition: Time.h:244
CMREXD const char * which_one_name(which_one which)
const long seconds_in_day
Definition: Time.h:222
bool operator==(const pair< T1, T2 > &x, const pair< T1, T2 > &y)
Definition: HMap.h:148
which_one
Definition: Time.h:241
const int seconds_in_minute
Definition: Time.h:218
const long max_microsecond
Definition: Time.h:214
Definition: Time.h:247
Definition: Time.h:250
TimeDate operator+(const TimePeriod &period) const
Definition: Time.h:432
Definition: Time.h:248
TimeDate operator+(const TimePeriod &period, const TimeDate &time_and_date)
Definition: Time.h:477
Definition: CommBuffer.h:28
const int months_in_year
Definition: Time.h:228
long CMREXD read_xml(AString &sOut, IBStream &i)
Definition: AString.cpp:65
Definition: Time.h:243
unsigned short week_t
Definition: Time.h:230
bool operator<(const pair< T1, T2 > &x, const pair< T1, T2 > &y)
Definition: HMap.h:155
const int days_in_leap_year
Definition: Time.h:227
CMREXD commore::OBStream & operator<<(commore::OBStream &stream, const commore::TimeDate &object)
Definition: Time.cpp:915
bool from_string(TimeDate &value, const char *text, bool utc)
Definition: Time.cpp:221
unsigned short second_t
Definition: Time.h:238
Definition: IOBStream.h:166
const int hours_in_day
Definition: Time.h:220
long long Long
Definition: Type.h:43
short year_t
Definition: Time.h:234
bool operator>(const TimeDate &time_and_date) const
Definition: Time.h:466
bool operator<=(const TimeDate &time_and_date) const
Definition: Time.h:460
bool operator==(const TimeDate &time_and_date) const
Definition: Time.h:445
const int seconds_in_hour
Definition: Time.h:221
Definition: IOBStream.h:29
bool CMREXD sleep(TimePeriod timeout)
Definition: Time.cpp:1054
unsigned short weekday_t
Definition: Time.h:231
unsigned short month_t
Definition: Time.h:232
const long seconds_in_week
Definition: Time.h:224
const long milliseconds_in_second
Definition: Time.h:213
Definition: Time.h:261
bool operator<(const TimeDate &time_and_date) const
Definition: Time.h:455