11 #ifndef __GU_DATETIME__
12 #define __GU_DATETIME__
15 #include "gu_exception.hpp"
16 #include "gu_regex.hpp"
28 const long long NSec = 1;
29 const long long USec = 1000*NSec;
30 const long long MSec = 1000*USec;
31 const long long Sec = 1000*MSec;
32 const long long Min = 60*Sec;
33 const long long Hour = 60*Min;
34 const long long Day = 24*Hour;
35 const long long Month = 30*Day;
36 const long long Year = 12*Month;
57 Period(
const std::string& str =
"") :
60 if (str !=
"") parse(str);
63 Period(
const long long nsecs_) : nsecs(nsecs_) { }
65 static Period min() {
return 0; }
66 static Period max() {
return std::numeric_limits<long long>::max();}
68 bool operator==(
const Period& cmp)
const
69 {
return (nsecs == cmp.nsecs); }
71 bool operator<(
const Period& cmp)
const
72 {
return (nsecs < cmp.nsecs); }
74 bool operator>=(
const Period& cmp)
const
75 {
return !(*
this < cmp); }
77 Period operator+(
const long long add)
const
78 {
return (nsecs + add); }
80 Period operator-(
const long long dec)
const
81 {
return (nsecs - dec); }
83 Period operator*(
const long long mul)
const
84 {
return (nsecs*mul); }
86 Period operator/(
const long long div)
const
87 {
return (nsecs/div); }
89 long long get_nsecs()
const {
return nsecs; }
94 friend std::istream& operator>>(std::istream&,
Period&);
96 static const char*
const period_regex;
97 static RegEx
const regex;
102 void parse(
const std::string&);
124 static inline Date now() {
return gu_time_monotonic(); }
140 {
return std::numeric_limits<long long>::max(); }
154 bool operator==(
const Date cmp)
const
155 {
return (utc == cmp.utc); }
157 bool operator<(
const Date cmp)
const
158 {
return (utc < cmp.utc); }
164 {
return (utc + add.get_nsecs()); }
170 {
return (utc - dec.get_nsecs()); }
174 {
return (utc - dec.utc); }
177 Date(
const long long utc_ = 0) : utc(utc_) { }
182 ts.tv_sec = utc / 1000000000L;
183 ts.tv_nsec = utc % 1000000000L;
194 void parse(
const std::string& str_);
201 std::ostream& operator<<(std::ostream&,
const Date&);
206 std::ostream& operator<<(std::ostream&,
const Period&);
208 inline std::string
to_string(
const Period& p)
210 std::ostringstream os;
215 inline std::istream& operator>>(std::istream& is, Period& p)
226 #endif // __GU_DATETIME__
std::string to_string(const T &x, std::ios_base &(*f)(std::ios_base &)=std::dec)
Definition: gu_utils.hpp:27
Date operator-(const Period &dec) const
Decrement period from Date.
Definition: gu_datetime.hpp:169
static Date zero()
Get zero time.
Definition: gu_datetime.hpp:145
void _timespec(timespec &ts) const
Definition: gu_datetime.hpp:180
static Date calendar()
Get time from system-wide realtime clock.
Definition: gu_datetime.hpp:129
Period(const std::string &str="")
Constructor.
Definition: gu_datetime.hpp:57
Date/time representation.
Definition: gu_datetime.hpp:115
static Date max()
Get maximum representable timestamp.
Definition: gu_datetime.hpp:139
static Date monotonic()
Get time from monotonic clock.
Definition: gu_datetime.hpp:134
long long get_utc() const
Definition: gu_datetime.hpp:151
Date operator+(const Period &add) const
Add period to Date.
Definition: gu_datetime.hpp:163
static Date now()
Get system time.
Definition: gu_datetime.hpp:124
Class representing time periods instead of system clock time.
Definition: gu_datetime.hpp:42