13#include <cctz/civil_time.h>
15#include <userver/utils/datetime/wall_coarse_clock.hpp>
17USERVER_NAMESPACE_BEGIN
24inline constexpr std::time_t kStartOfTheEpoch = 0;
32inline const std::string
kIsoFormat =
"%Y-%m-%dT%H:%M:%SZ";
34using timepair_t = std::pair<std::uint8_t, std::uint8_t>;
39 DateParseError(
const std::string& timestring);
45 TimezoneLookupError(
const std::string& tzname);
52std::chrono::system_clock::time_point
Now()
noexcept;
56std::chrono::system_clock::time_point
Epoch()
noexcept;
67std::chrono::steady_clock::time_point
SteadyNow()
noexcept;
78 using time_point = std::chrono::steady_clock::time_point;
91 bool include_time_to =
false
105 std::time_t timestamp,
124 std::chrono::system_clock::time_point tp,
145 const std::string& timestring,
154std::chrono::system_clock::time_point
164std::chrono::system_clock::time_point
GuessStringtime(
const std::string& timestamp,
const std::string& timezone);
178 const std::string& timestring,
205cctz::civil_second
Localize(
const std::chrono::system_clock::time_point& tp,
const std::string& timezone);
239template <
class Duration,
class Clock>
240double CalcTimeDiff(
const std::chrono::time_point<Clock>& a,
const std::chrono::time_point<Clock>& b) {
241 const auto duration_a = a.time_since_epoch();
242 const auto duration_b = b.time_since_epoch();
243 return std::chrono::duration_cast<Duration>(duration_a - duration_b).count();
240double CalcTimeDiff(
const std::chrono::time_point<Clock>& a,
const std::chrono::time_point<Clock>& b) {
…}