13#include <cctz/civil_time.h>
14#include <cctz/time_zone.h>
16#include <userver/utils/datetime/wall_coarse_clock.hpp>
18USERVER_NAMESPACE_BEGIN
25inline constexpr std::time_t kStartOfTheEpoch = 0;
33inline const std::string
kIsoFormat =
"%Y-%m-%dT%H:%M:%SZ";
35using timepair_t = std::pair<std::uint8_t, std::uint8_t>;
40 DateParseError(
const std::string& timestring);
46 TimezoneLookupError(
const std::string& tzname);
53std::chrono::system_clock::time_point
Now()
noexcept;
57std::chrono::system_clock::time_point
Epoch()
noexcept;
68std::chrono::steady_clock::time_point
SteadyNow()
noexcept;
79 using time_point = std::chrono::steady_clock::time_point;
92 bool include_time_to =
false
98std::chrono::system_clock::time_point
DoGuessStringtime(
const std::string& timestring,
const cctz::time_zone& timezone);
110std::string Timestring(std::chrono::system_clock::time_point tp);
127std::chrono::system_clock::time_point
134std::chrono::system_clock::time_point
139std::chrono::system_clock::time_point
Stringtime(
const std::string& timestring);
145std::optional<std::chrono::system_clock::time_point>
146OptionalStringtime(
const std::string& timestring,
const cctz::time_zone& timezone,
const std::string& format);
150std::optional<std::chrono::system_clock::time_point>
OptionalStringtime(
const std::string& timestring);
195template <
class Duration,
class Clock>
196double CalcTimeDiff(
const std::chrono::time_point<Clock>& a,
const std::chrono::time_point<Clock>& b) {
197 const auto duration_a = a.time_since_epoch();
198 const auto duration_b = b.time_since_epoch();
199 return std::chrono::duration_cast<Duration>(duration_a - duration_b).count();
196double CalcTimeDiff(
const std::chrono::time_point<Clock>& a,
const std::chrono::time_point<Clock>& b) {
…}