12#include <cctz/civil_time.h>
14USERVER_NAMESPACE_BEGIN
21inline constexpr std::time_t kStartOfTheEpoch = 0;
29inline const std::string
kIsoFormat =
"%Y-%m-%dT%H:%M:%SZ";
31using timepair_t = std::pair<uint8_t, uint8_t>;
36 DateParseError(
const std::string& timestring);
42 TimezoneLookupError(
const std::string& tzname);
49std::chrono::system_clock::time_point
Now()
noexcept;
53std::chrono::system_clock::time_point
Epoch()
noexcept;
64std::chrono::steady_clock::time_point
SteadyNow()
noexcept;
69 using time_point = std::chrono::steady_clock::time_point;
71 static time_point now() {
return SteadyNow(); }
75bool IsTimeBetween(
int hour,
int min,
int hour_from,
int min_from,
int hour_to,
76 int min_to,
bool include_time_to =
false)
noexcept;
100std::string
Timestring(std::chrono::system_clock::time_point tp,
118 const std::string& timestring,
127 const std::string& timestring,
const std::string& format =
kDefaultFormat);
135 const std::string& timestamp,
const std::string& timezone);
140 const std::string& timestamp);
148 const std::string& timestring,
155std::time_t
Timestamp(std::chrono::system_clock::time_point tp)
noexcept;
170cctz::civil_second
Localize(
const std::chrono::system_clock::time_point& tp,
171 const std::string& timezone);
176 const std::chrono::system_clock::time_point& tp);
183 const std::string& timezone);
198 const std::chrono::system_clock::time_point& tp)
noexcept;
204template <
class Duration,
class Clock>
206 const std::chrono::time_point<Clock>& b) {
207 const auto duration_a = a.time_since_epoch();
208 const auto duration_b = b.time_since_epoch();
209 return std::chrono::duration_cast<Duration>(duration_a - duration_b).count();