11 |
|
|
12 |
|
#include <ctime> |
13 |
|
|
14 |
+ |
template<int Seconds> |
15 |
+ |
class Period |
16 |
+ |
{ |
17 |
+ |
private: |
18 |
+ |
uint64_t seconds; |
19 |
+ |
public: |
20 |
+ |
Period(uint64_t period) : seconds(period * Seconds) {} |
21 |
+ |
operator uint64_t() const { return seconds; } |
22 |
+ |
}; |
23 |
+ |
|
24 |
+ |
typedef Period<60> Minute; |
25 |
+ |
typedef Period<3600> Hour; |
26 |
+ |
typedef Period<86400> Day; |
27 |
+ |
|
28 |
|
class Stamp |
29 |
|
{ |
30 |
|
private: |
31 |
+ |
std::time_t when; |
32 |
|
std::tm stamp; |
33 |
|
public: |
34 |
< |
Stamp(std::time_t now = std::time(NULL)) { gmtime_r(&now, &stamp); } |
34 |
> |
Stamp(std::time_t when = std::time(NULL)) : when(when) { gmtime_r(&when, |
35 |
> |
&stamp); } |
36 |
|
Stamp(const ext::String& when); |
37 |
|
operator ext::String() const; |
38 |
< |
Stamp operator+(int days) const; |
39 |
< |
Stamp operator-(int days) const { return *this + -days; } |
40 |
< |
Stamp& operator++() { *this += 1; return *this; } |
25 |
< |
Stamp operator++(int) { Stamp stamp(*this); *this += 1; return stamp; } |
26 |
< |
Stamp& operator+=(int days) { *this = *this + days; return *this; } |
27 |
< |
Stamp& operator--() { *this -= 1; return *this; } |
28 |
< |
Stamp operator--(int) { Stamp stamp(*this); *this -= 1; return stamp; } |
29 |
< |
Stamp& operator-=(int days) { *this = *this - days; return *this; } |
38 |
> |
Stamp operator+(std::time_t seconds) const { return when + seconds; } |
39 |
> |
Stamp operator-(std::time_t seconds) const { return when - seconds; } |
40 |
> |
bool operator<(const Stamp& stamp) const { return when < stamp.when; } |
41 |
|
}; |
42 |
|
|
43 |
+ |
inline std::ostream& operator<<(std::ostream& sout, const Stamp& stamp) { return sout << ext::String(stamp); } |
44 |
+ |
|
45 |
|
#endif // _Stamp_hpp_ |