2#include <boost/algorithm/string/replace.hpp>
14 std::string timestring = boost::posix_time::to_iso_extended_string(timestamp);
15 boost::replace_all(timestring,
",",
".");
16 if (timestring ==
"not-a-date-time")
22 return timestring +
"Z";
39 boost::replace_all(value,
"T",
" ");
40 boost::replace_all(value,
"Z",
"");
41 timestamp = boost::posix_time::time_from_string(value);
59 return boost::posix_time::microsec_clock::universal_time();
66 throw std::logic_error(
"Time is not set");
68 std::vector<unsigned char> serialization;
69 size_t size =
sizeof(uint16_t) + 5 *
sizeof(uint8_t) +
sizeof(uint32_t);
70 serialization.reserve(size);
72 auto date = timestamp.date();
73 auto time = timestamp.time_of_day();
74 uint16_t year =
static_cast<uint16_t
>(date.year());
75 uint8_t month =
static_cast<uint8_t
>(date.month().as_number());
76 uint8_t day =
static_cast<uint8_t
>(date.day().as_number());
77 uint8_t hour =
static_cast<uint8_t
>(time.hours());
78 uint8_t minute =
static_cast<uint8_t
>(time.minutes());
79 uint8_t seconds =
static_cast<uint8_t
>(time.seconds());
80 uint32_t nanoseconds =
static_cast<uint32_t
>(time.fractional_seconds());
82 switch (time.num_fractional_digits())
85 nanoseconds *= 1000000;
93 throw std::logic_error(
"Unknown fractional seconds!");
96 unsigned char* pointer =
reinterpret_cast<unsigned char*
>(&year);
97 for (
int i = 0; i <
sizeof(uint16_t); i++)
99 serialization.push_back(pointer[i]);
101 serialization.push_back(month);
102 serialization.push_back(day);
103 serialization.push_back(hour);
104 serialization.push_back(minute);
105 serialization.push_back(seconds);
107 pointer =
reinterpret_cast<unsigned char*
>(&nanoseconds);
108 for (
int i = 0; i <
sizeof(uint32_t); i++)
110 serialization.push_back(pointer[i]);
113 return serialization;
124 return (t1.timestamp >= t2.timestamp);
136 return (t1.timestamp <= t2.timestamp);
bool is_null(void) const
Is Null?
DLL Time()
Uninitialized Constructor.
DLL std::string rfc3339(void) const
RFC3339 representation.
DLL std::vector< unsigned char > serialize(void) const
Bytewise serialization.
static DLL boost::posix_time::ptime utc_now(void)
Current Time.
DLL bool operator<=(const Time &t1, const Time &t2)
LEQ Time Operator.
DLL bool operator>=(const Time &t1, const Time &t2)
GEQ Time Operator.