rllib  1
rltime_v2.h
Go to the documentation of this file.
1 /***************************************************************************
2  rltime_v2.h - description
3  -------------------
4  begin : Tue Jan 02 2001
5  copyright : (C) 2001 by R. Lehrig
6  email : lehrig@t-online.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This library is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as *
13  * published by the Free Software Foundation *
14  * *
15  ***************************************************************************/
16 #ifndef _RL_TIME_V2_H_
17 #define _RL_TIME_V2_H_
18 
19 #include "rldefine.h"
20 #include <time.h>
21 
22 namespace ns_rltime_v2
23 {
27 class rlTime
28 {
29 public:
30  // local time type, on some platforms there is no 2038 safe definition available which we can avoid this way
31  // typedef int64_t time_t; ///< for applying relative adjustments to the time, it's a redefintion on most modern platform, but anyway
32  // typedef double ftime_t; ///< for applying relative adjustments in fractions of a second
33 
34  rlTime(int Year=0, int Month=0, int Day=0, int Hour=0, int Minute=0, int Second=0, int Millisecond=0);
35 #ifdef RLCPP11
36  rlTime(double&) = delete;
37 #endif
38  virtual ~rlTime();
39  const char *version();
40  const char *getTimeString();
41  const char *getIsoTimeString();
42  const char *toString(const char *format);
43  void getLocalTime();
44  int getFileModificationTime(const char *filename);
45 
49  void setTimeFromString(const char *time_string);
50  void setTimeFromIsoString(const char *iso_time_string);
51  void setTimeFromSeconds(double const seconds); // we assume 30.5 days per month
52 
53  void setLocalTime();
54  double secondsSinceEpoche() const;
55  double seconds() const; // we assume 30.5 days per month
56 
57  rlTime& operator+= (const rlTime &time);
58  rlTime& operator-= (const rlTime &time);
59  rlTime operator+ (const rlTime &time) const;
60  rlTime operator- (const rlTime &time) const;
61 
62  rlTime& operator+= (double seconds); // we assume 30.5 days per month
63  rlTime& operator-= (double seconds); // we assume 30.5 days per month
64  rlTime operator+ (double seconds) const; // we assume 30.5 days per month
65  rlTime operator- (double seconds) const; // we assume 30.5 days per month
66 
67  rlTime& operator+= (time_t seconds);
68  rlTime& operator-= (time_t seconds);
69  rlTime operator+ (time_t seconds) const;
70  rlTime operator- (time_t seconds) const;
71 
72  // already defined see: "double const" above
73  //rlTime& operator += (const ftime_t& seconds); // we assume 30.5 days per month
74  //rlTime& operator -= (const ftime_t& seconds); // we assume 30.5 days per month
75  //rlTime operator + (const ftime_t& seconds) const; // we assume 30.5 days per month
76  //rlTime operator - (const ftime_t& seconds) const; // we assume 30.5 days per month
77 
78  int operator== (const rlTime &time) const;
79  int operator< (const rlTime &time) const;
80  int operator<= (const rlTime &time) const;
81  int operator> (const rlTime &time) const;
82  int operator>= (const rlTime &time) const;
83 
84  int year;
85  int month;
86  int day;
87  int hour;
88  int minute;
89  int second;
91 
93  {
102  };
103 
105  static const char* formatTimeDiff(double, enum FormatLargestUnit = HoursMinutesSecondsFraction, unsigned bufferLength = 32, char* buffer = 0);
106 
108  static const char* formatTimeDiff(const rlTime& t1, const rlTime& t2, enum FormatLargestUnit = HoursMinutesSecondsFraction, unsigned bufferLength = 32, char* buffer = 0);
109 
112 
114  const char *formatTimeDiffString(const rlTime& t1, const rlTime& t2, enum FormatLargestUnit = HoursMinutesSecondsFraction);
115 
116 
117  static time_t timegm(struct tm* tm_);
118  void normalizeAsDate();
120  // similar oddities for the time are corrected.
122 private:
123  char time_string[32*2]; // 2001-11-23 12:52:60 056
124  char iso_time_string[32]; // 2001-11-23T12:52:60.056
125 
126 #ifndef RLCPP11
127  explicit rlTime(double&); // intentionally no implementation, as this shall not be explicit or implicit used
128 #endif
129 };
130 
131 } // end of namespace ns_rltime_v2
132 
133 #endif
static time_t timegm(struct tm *tm_)
Definition: rltime_v2.cpp:1017
rlTime operator+(const rlTime &time) const
Definition: rltime_v2.cpp:616
"0:00:00:00.000", needs at least 15 bytes buffer
Definition: rltime_v2.h:96
int operator>=(const rlTime &time) const
Definition: rltime_v2.cpp:869
int getFileModificationTime(const char *filename)
Definition: rltime.cpp:164
"0:0:00:00:00.000", needs at least 17 bytes buffer
Definition: rltime_v2.h:97
double secondsSinceEpoche() const
Definition: rltime_v2.cpp:1028
int operator<(const rlTime &time) const
Definition: rltime_v2.cpp:802
const char * formatTimeDiffString(double, enum FormatLargestUnit=HoursMinutesSecondsFraction)
Caller chooses formatting template, default is Hours:Minutes:Seconds.Milliseconds, returned object manages string memory.
Definition: rltime_v2.cpp:1142
rlTime & operator-=(const rlTime &time)
Definition: rltime_v2.cpp:608
"0:00", needs at least 5 bytes buffer
Definition: rltime_v2.h:98
void setTimeFromString(const char *time_string)
Definition: rltime.cpp:78
const char * getIsoTimeString()
Definition: rltime.cpp:108
int operator==(const rlTime &time) const
Definition: rltime_v2.cpp:789
"0:00.000", needs at least 9 bytes buffer
Definition: rltime_v2.h:94
char iso_time_string[32]
Definition: rltime_v2.h:124
rlTime & operator+=(const rlTime &time)
Definition: rltime_v2.cpp:600
const char * toString(const char *format)
Definition: rltime_v2.cpp:265
"0:00:00", needs at least 8 bytes buffer
Definition: rltime_v2.h:99
int operator>(const rlTime &time) const
Definition: rltime_v2.cpp:839
const char * getTimeString()
Definition: rltime.cpp:102
virtual ~rlTime()
Definition: rltime.cpp:74
rlTime(int Year=0, int Month=0, int Day=0, int Hour=0, int Minute=0, int Second=0, int Millisecond=0)
Definition: rltime.cpp:63
void setTimeFromIsoString(const char *iso_time_string)
Definition: rltime.cpp:90
char time_string[32 *2]
Definition: rltime_v2.h:123
"0:0:00:00:00", needs at least 13 bytes buffer
Definition: rltime_v2.h:101
void setTimeFromSeconds(double const seconds)
Definition: rltime_v2.cpp:186
int operator<=(const rlTime &time) const
Definition: rltime_v2.cpp:832
"0:00:00.000", needs at least 12 bytes buffer
Definition: rltime_v2.h:95
static const char * formatTimeDiff(double, enum FormatLargestUnit=HoursMinutesSecondsFraction, unsigned bufferLength=32, char *buffer=0)
Caller chooses formatting template, default is Hours:Minutes:Seconds.Milliseconds, caller provides buffer, or buffer must be deleted (delete[])
Definition: rltime_v2.cpp:1068
double seconds() const
Definition: rltime_v2.cpp:1062
"0:00:00:00", needs at least 11 bytes buffer
Definition: rltime_v2.h:100
rlTime operator-(const rlTime &time) const
Definition: rltime_v2.cpp:694
const char * version()
Definition: rltime_v2.cpp:150