userver: utils::datetime Namespace Reference
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
utils::datetime Namespace Reference

Detailed Description

Date and time utilities.

Classes

class  Date
 Date in format YYYY-MM-DD, std::chrono::year_month_day like type. More...
 
class  DateParseError
 Date/time parsing error. More...
 
class  SteadyClock
 
struct  SteadyCoarseClock
 Steady clock with up to a few millisecond resolution that is slightly faster than the std::chrono::steady_clock. More...
 
class  TimeOfDay
 A simple implementation of a "time since midnight" datatype. More...
 
class  TimeOfDay< std::chrono::duration< Rep, Period > >
 
class  TimePointTz
 Timepoint with timezone parsed in kRfc3339Format. More...
 
class  TimePointTzBase
 
class  TimePointTzFraction
 Timepoint with timezone parsed in kFractionFormat. More...
 
class  TimePointTzIsoBasic
 Timepoint with timezone parsed in kDefaultFormat. More...
 
class  TimezoneLookupError
 Timezone information lookup error. More...
 
struct  WallCoarseClock
 System clock with up to a few millisecond resolution that is slightly faster than the std::chrono::system_clock. More...
 

Typedefs

using timepair_t = std::pair< std::uint8_t, std::uint8_t >
 
using Days = date::days
 
using DaysTimepoint = date::sys_days
 

Functions

template<class Duration = std::chrono::system_clock::duration>
std::chrono::time_point< std::chrono::system_clock, Duration > FromStringSaturating (const std::string &timestring, const std::string &format)
 Converts strings of the specified format starting with "%Y" to std::chrono::system_clock::time_point in UTC timezone and saturates on overflow.
 
template<class Duration = std::chrono::system_clock::duration>
std::chrono::time_point< std::chrono::system_clock, Duration > FromRfc3339StringSaturating (const std::string &timestring)
 Converts strings like "2012-12-12T00:00:00" to std::chrono::system_clock::time_point in UTC timezone and saturates on overflow Example:
 
std::chrono::system_clock::time_point Now () noexcept
 std::chrono::system_clock::now() that could be mocked
 
std::chrono::system_clock::time_point Epoch () noexcept
 Returns std::chrono::system_clock::time_point from the start of the epoch.
 
std::chrono::steady_clock::time_point SteadyNow () noexcept
 std::chrono::steady_clock::now() that could be mocked
 
WallCoarseClock::time_point WallCoarseNow () noexcept
 utils::datetime::WallCoarseClock::now() that could be mocked
 
bool IsTimeBetween (int hour, int min, int hour_from, int min_from, int hour_to, int min_to, bool include_time_to=false) noexcept
 Returns true if the time is in range; works over midnight too.
 
std::chrono::system_clock::time_point DoGuessStringtime (const std::string &timestring, const cctz::time_zone &timezone)
 Extracts time point from a string, guessing the format.
 
std::string LocalTimezoneTimestring (std::time_t timestamp, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format in local timezone.
 
std::string UtcTimestring (std::time_t timestamp, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format in UTC timezone.
 
std::string Timestring (std::chrono::system_clock::time_point tp)
 
std::string LocalTimezoneTimestring (std::chrono::system_clock::time_point tp, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format in local timezone.
 
template<class Duration >
std::string UtcTimestring (std::chrono::time_point< std::chrono::system_clock, Duration > tp, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format in UTC timezone.
 
std::chrono::system_clock::time_point LocalTimezoneStringtime (const std::string &timestring, const std::string &format=kDefaultFormat)
 Extracts time point from a string of a specified format in local timezone.
 
std::chrono::system_clock::time_point UtcStringtime (const std::string &timestring, const std::string &format=kDefaultFormat)
 Extracts time point from a string of a specified format in UTC timezone.
 
std::chrono::system_clock::time_point Stringtime (const std::string &timestring)
 Extracts time point from a string of a kDefaultFormat format in UTC timezone.
 
std::optional< std::chrono::system_clock::time_point > OptionalStringtime (const std::string &timestring, const cctz::time_zone &timezone, const std::string &format)
 Extracts time point from a string of a specified format.
 
std::optional< std::chrono::system_clock::time_point > OptionalStringtime (const std::string &timestring)
 Extracts time point from a string of a kDefaultFormat format in UTC timezone.
 
std::chrono::system_clock::time_point GuessLocalTimezoneStringtime (const std::string &timestamp)
 Extracts time point from a string, guessing the format.
 
std::time_t Timestamp (std::chrono::system_clock::time_point tp) noexcept
 Converts time point to std::time_t.
 
std::time_t Timestamp () noexcept
 Returned current time as std::time_t; could be mocked.
 
std::uint32_t ParseDayTime (const std::string &str)
 Parse day time in hh:mm[:ss] format.
 
cctz::civil_second LocalTimezoneLocalize (const std::chrono::system_clock::time_point &tp)
 Converts absolute time in std::chrono::system_clock::time_point to a civil time of a local timezone.
 
std::time_t LocalTimezoneUnlocalize (const cctz::civil_second &local_tp)
 Converts a civil time in a local timezone into an absolute time.
 
std::string TimestampToString (std::time_t timestamp)
 Returns string with time in ISO8601 format "YYYY-MM-DDTHH:MM:SS+0000".
 
std::int64_t TimePointToTicks (const std::chrono::system_clock::time_point &tp) noexcept
 Convert time_point to DotNet ticks.
 
std::chrono::system_clock::time_point TicksToTimePoint (std::int64_t ticks) noexcept
 Convert DotNet ticks to a time point.
 
template<class Duration , class Clock >
double CalcTimeDiff (const std::chrono::time_point< Clock > &a, const std::chrono::time_point< Clock > &b)
 Compute (a - b) with a specified duration.
 
std::string Timestring (std::time_t timestamp, const std::string &timezone=kDefaultTimezone, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format, for UTC times prefer a faster utils::datetime::UtcTimestring.
 
std::string Timestring (std::chrono::system_clock::time_point tp, const std::string &timezone, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format, for UTC times prefer a faster utils::datetime::UtcTimestring.
 
std::chrono::system_clock::time_point Stringtime (const std::string &timestring, const std::string &timezone, const std::string &format=kDefaultFormat)
 Extracts time point from a string of a specified format, for UTC times prefer a faster utils::datetime::UtcStringtime.
 
std::chrono::system_clock::time_point GuessStringtime (const std::string &timestamp, const std::string &timezone)
 Extracts time point from a string, guessing the format.
 
std::optional< std::chrono::system_clock::time_point > OptionalStringtime (const std::string &timestring, const std::string &timezone, const std::string &format=kDefaultFormat)
 Returns optional time in a string of specified format.
 
cctz::civil_second Localize (const std::chrono::system_clock::time_point &tp, const std::string &timezone)
 Converts absolute time in std::chrono::system_clock::time_point to a civil time of a particular timezone.
 
std::time_t Unlocalize (const cctz::civil_second &local_tp, const std::string &timezone)
 Converts a civil time in a specified timezone into an absolute time.
 
constexpr Days DaysBetweenYears (int from, int to)
 Calculates the number of days between January 1, 00:00 of two years accounting for leap years.
 
constexpr date::day DaysInMonth (int month, int year)
 Get the number of days in the given month of a given year.
 
void MockNowSet (std::chrono::system_clock::time_point new_mocked_now)
 
void MockSleep (std::chrono::milliseconds duration)
 
void MockNowUnset () noexcept
 
bool IsMockNow () noexcept
 
Date DateFromRFC3339String (const std::string &date_string)
 Validates date_string and constructs date from YYYY-MM-DD string and.
 
std::string ToString (Date date)
 Outputs date as a YYYY-MM-DD string.
 
template<typename Value >
std::enable_if_t< formats::common::kIsFormatValue< Value >, DateParse (const Value &value, formats::parse::To< Date >)
 
template<typename Value >
std::enable_if_t< formats::common::kIsFormatValue< Value >, Value > Serialize (Date date, formats::serialize::To< Value >)
 
template<typename StringBuilder >
void WriteToStream (Date value, StringBuilder &sw)
 
template<typename LogHelper = ::logging::LogHelper>
::logging::LogHelperoperator<< (::logging::LogHelper &lh, const Date &date)
 
std::ostream & operator<< (std::ostream &os, Date date)
 
bool operator< (const TimePointTzBase::TimePoint &lhs, const TimePointTzBase &rhs)
 
bool operator> (const TimePointTzBase::TimePoint &lhs, const TimePointTzBase &rhs)
 
bool operator<= (const TimePointTzBase::TimePoint &lhs, const TimePointTzBase &rhs)
 
bool operator>= (const TimePointTzBase::TimePoint &lhs, const TimePointTzBase &rhs)
 
logging::LogHelperoperator<< (logging::LogHelper &os, const TimePointTzFraction &v)
 
logging::LogHelperoperator<< (logging::LogHelper &os, const TimePointTz &v)
 
logging::LogHelperoperator<< (logging::LogHelper &os, const TimePointTzIsoBasic &v)
 
Duration arithmetic
template<typename LDuration , typename RDuration >
auto operator- (TimeOfDay< LDuration > lhs, TimeOfDay< RDuration > rhs)
 
template<typename Duration , typename Rep , typename Period >
TimeOfDay< Duration > operator+ (TimeOfDay< Duration > lhs, std::chrono::duration< Rep, Period > rhs)
 
template<typename Duration , typename Rep , typename Period >
TimeOfDay< Duration > operator- (TimeOfDay< Duration > lhs, std::chrono::duration< Rep, Period > rhs)
 
template<typename Duration >
logging::LogHelperoperator<< (logging::LogHelper &lh, TimeOfDay< Duration > value)
 

Variables

const std::string kRfc3339Format = "%Y-%m-%dT%H:%M:%E*S%Ez"
 
const std::string kTaximeterFormat = "%Y-%m-%dT%H:%M:%E6SZ"
 
constexpr std::time_t kStartOfTheEpoch = 0
 
const std::string kDefaultDriverTimezone = "Europe/Moscow"
 
const std::string kDefaultTimezone = "UTC"
 
const std::string kDefaultFormat = "%Y-%m-%dT%H:%M:%E*S%z"
 
const std::string kIsoFormat = "%Y-%m-%dT%H:%M:%SZ"
 
const std::string kFractionFormat = "%Y-%m-%dT%H:%M:%S.%E*f%z"
 

Typedef Documentation

◆ Days

using utils::datetime::Days = typedef date::days

Definition at line 23 of file cpp_20_calendar.hpp.

◆ DaysTimepoint

using utils::datetime::DaysTimepoint = typedef date::sys_days

Definition at line 24 of file cpp_20_calendar.hpp.

◆ timepair_t

using utils::datetime::timepair_t = typedef std::pair<std::uint8_t, std::uint8_t>

Definition at line 37 of file datetime_light.hpp.

Function Documentation

◆ CalcTimeDiff()

template<class Duration , class Clock >
double utils::datetime::CalcTimeDiff ( const std::chrono::time_point< Clock > &  a,
const std::chrono::time_point< Clock > &  b 
)

Compute (a - b) with a specified duration.

Definition at line 218 of file datetime_light.hpp.

◆ DaysBetweenYears()

constexpr Days utils::datetime::DaysBetweenYears ( int  from,
int  to 
)
constexpr

Calculates the number of days between January 1, 00:00 of two years accounting for leap years.

Definition at line 27 of file cpp_20_calendar.hpp.

◆ DaysInMonth()

constexpr date::day utils::datetime::DaysInMonth ( int  month,
int  year 
)
constexpr

Get the number of days in the given month of a given year.

Definition at line 35 of file cpp_20_calendar.hpp.

◆ DoGuessStringtime()

std::chrono::system_clock::time_point utils::datetime::DoGuessStringtime ( const std::string &  timestring,
const cctz::time_zone &  timezone 
)

Extracts time point from a string, guessing the format.

Note
Use GuessStringtime instead
Exceptions
utils::datetime::DateParseError

◆ FromRfc3339StringSaturating()

template<class Duration = std::chrono::system_clock::duration>
std::chrono::time_point< std::chrono::system_clock, Duration > utils::datetime::FromRfc3339StringSaturating ( const std::string &  timestring)

Converts strings like "2012-12-12T00:00:00" to std::chrono::system_clock::time_point in UTC timezone and saturates on overflow Example:

utils::datetime::FromRfc3339StringSaturating("10000-01-01T00:00:00+0000"),
std::chrono::system_clock::time_point::max()
);

Definition at line 49 of file from_string_saturating.hpp.

◆ FromStringSaturating()

template<class Duration = std::chrono::system_clock::duration>
std::chrono::time_point< std::chrono::system_clock, Duration > utils::datetime::FromStringSaturating ( const std::string &  timestring,
const std::string &  format 
)

Converts strings of the specified format starting with "%Y" to std::chrono::system_clock::time_point in UTC timezone and saturates on overflow.

Definition at line 23 of file from_string_saturating.hpp.

◆ GuessLocalTimezoneStringtime()

std::chrono::system_clock::time_point utils::datetime::GuessLocalTimezoneStringtime ( const std::string &  timestamp)

Extracts time point from a string, guessing the format.

Exceptions
utils::datetime::DateParseError

◆ GuessStringtime()

std::chrono::system_clock::time_point utils::datetime::GuessStringtime ( const std::string &  timestamp,
const std::string &  timezone 
)

Extracts time point from a string, guessing the format.

Exceptions
utils::datetime::DateParseError
utils::datetime::TimezoneLookupError

Example:

const auto tp = utils::datetime::UtcStringtime("2014-03-17T02:47:07+0000");
EXPECT_EQ(utils::datetime::GuessStringtime("2014-03-17T02:47:07+0000", "UTC"), tp);

◆ IsMockNow()

bool utils::datetime::IsMockNow ( )
noexcept

Returns true if time point is mocked for utils::datetime::Now(), utils::datetime::SteadyNow() and utils::datetime::WallCoarseClock::Now().

◆ Localize()

cctz::civil_second utils::datetime::Localize ( const std::chrono::system_clock::time_point &  tp,
const std::string &  timezone 
)

Converts absolute time in std::chrono::system_clock::time_point to a civil time of a particular timezone.

Exceptions
utils::datetime::TimezoneLookupError

Example:

◆ LocalTimezoneStringtime()

std::chrono::system_clock::time_point utils::datetime::LocalTimezoneStringtime ( const std::string &  timestring,
const std::string &  format = kDefaultFormat 
)

Extracts time point from a string of a specified format in local timezone.

Exceptions
utils::datetime::DateParseError
See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ LocalTimezoneTimestring() [1/2]

std::string utils::datetime::LocalTimezoneTimestring ( std::chrono::system_clock::time_point  tp,
const std::string &  format = kDefaultFormat 
)

Returns time in a string of specified format in local timezone.

See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ LocalTimezoneTimestring() [2/2]

std::string utils::datetime::LocalTimezoneTimestring ( std::time_t  timestamp,
const std::string &  format = kDefaultFormat 
)

Returns time in a string of specified format in local timezone.

See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ MockNowSet()

void utils::datetime::MockNowSet ( std::chrono::system_clock::time_point  new_mocked_now)

Sets the mocked value for utils::datetime::Now(), utils::datetime::SteadyNow() and utils::datetime::WallCoarseClock::Now().

Thread safe.

◆ MockNowUnset()

void utils::datetime::MockNowUnset ( )
noexcept

Removes time point mocking for utils::datetime::Now(), utils::datetime::SteadyNow() and utils::datetime::WallCoarseClock::Now().

◆ MockSleep()

void utils::datetime::MockSleep ( std::chrono::milliseconds  duration)

Adds duration to current mocked time point value

Thread safe.

Exceptions
utils::InvariantErrorif IsMockNow() returns false.

◆ Now()

std::chrono::system_clock::time_point utils::datetime::Now ( )
noexcept

std::chrono::system_clock::now() that could be mocked

Returns last time point passed to utils::datetime::MockNowSet(), or std::chrono::system_clock::now() if the timepoint is not mocked.

Examples
samples/config_service/main.cpp, samples/digest_auth_service/auth_digest.cpp, and samples/testsuite-support/src/now.cpp.

◆ operator+()

template<typename Duration , typename Rep , typename Period >
TimeOfDay< Duration > utils::datetime::operator+ ( TimeOfDay< Duration >  lhs,
std::chrono::duration< Rep, Period rhs 
)

Definition at line 137 of file time_of_day.hpp.

◆ operator-() [1/2]

template<typename Duration , typename Rep , typename Period >
TimeOfDay< Duration > utils::datetime::operator- ( TimeOfDay< Duration >  lhs,
std::chrono::duration< Rep, Period rhs 
)

Definition at line 142 of file time_of_day.hpp.

◆ operator-() [2/2]

auto utils::datetime::operator- ( TimeOfDay< LDuration lhs,
TimeOfDay< RDuration rhs 
)

Definition at line 132 of file time_of_day.hpp.

◆ operator<<() [1/2]

template<typename LogHelper = ::logging::LogHelper>
::logging::LogHelper & utils::datetime::operator<< ( ::logging::LogHelper lh,
const Date date 
)

Definition at line 100 of file date.hpp.

◆ operator<<() [2/2]

template<typename Duration >
logging::LogHelper & utils::datetime::operator<< ( logging::LogHelper lh,
TimeOfDay< Duration >  value 
)

Definition at line 148 of file time_of_day.hpp.

◆ OptionalStringtime() [1/3]

std::optional< std::chrono::system_clock::time_point > utils::datetime::OptionalStringtime ( const std::string &  timestring)

Extracts time point from a string of a kDefaultFormat format in UTC timezone.

Exceptions
utils::datetime::DateParseError

◆ OptionalStringtime() [2/3]

std::optional< std::chrono::system_clock::time_point > utils::datetime::OptionalStringtime ( const std::string &  timestring,
const cctz::time_zone &  timezone,
const std::string &  format 
)

Extracts time point from a string of a specified format.

Exceptions
utils::datetime::DateParseError
See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ OptionalStringtime() [3/3]

std::optional< std::chrono::system_clock::time_point > utils::datetime::OptionalStringtime ( const std::string &  timestring,
const std::string &  timezone,
const std::string &  format = kDefaultFormat 
)

Returns optional time in a string of specified format.

Example:

const auto tp = utils::datetime::UtcStringtime("2014-03-17T02:47:07+0000");
EXPECT_EQ(utils::datetime::OptionalStringtime("2014-03-17T02:47:07+0000").value(), tp);
See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ Parse()

template<typename Value >
std::enable_if_t< formats::common::kIsFormatValue< Value >, Date > utils::datetime::Parse ( const Value &  value,
formats::parse::To< Date  
)

Definition at line 75 of file date.hpp.

◆ ParseDayTime()

std::uint32_t utils::datetime::ParseDayTime ( const std::string &  str)

Parse day time in hh:mm[:ss] format.

Parameters
strday time in format hh:mm[:ss]
Returns
number of second since start of day

◆ Serialize()

template<typename Value >
std::enable_if_t< formats::common::kIsFormatValue< Value >, Value > utils::datetime::Serialize ( Date  date,
formats::serialize::To< Value >   
)

Definition at line 91 of file date.hpp.

◆ SteadyNow()

std::chrono::steady_clock::time_point utils::datetime::SteadyNow ( )
noexcept

std::chrono::steady_clock::now() that could be mocked

Returns last time point passed to utils::datetime::MockNowSet(), or std::chrono::steady_clock::now() if the timepoint is not mocked.

It is only intended for period-based structures/algorithms testing.

Warning
You MUST NOT pass time points received from this function outside of your own code. Otherwise this will break your service in production.

◆ Stringtime() [1/2]

std::chrono::system_clock::time_point utils::datetime::Stringtime ( const std::string &  timestring)

Extracts time point from a string of a kDefaultFormat format in UTC timezone.

Exceptions
utils::datetime::DateParseError
Examples
samples/config_service/main.cpp, and samples/mongo_service/main.cpp.

◆ Stringtime() [2/2]

std::chrono::system_clock::time_point utils::datetime::Stringtime ( const std::string &  timestring,
const std::string &  timezone,
const std::string &  format = kDefaultFormat 
)

Extracts time point from a string of a specified format, for UTC times prefer a faster utils::datetime::UtcStringtime.

Exceptions
utils::datetime::DateParseError
utils::datetime::TimezoneLookupError

Example:

const auto tp = utils::datetime::UtcStringtime("2014-03-17T02:47:07+0000");
EXPECT_EQ(utils::datetime::UtcStringtime("2014-03-17T02:47:07+0000"), tp);
See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ TimePointToTicks()

std::int64_t utils::datetime::TimePointToTicks ( const std::chrono::system_clock::time_point &  tp)
noexcept

Convert time_point to DotNet ticks.

Parameters
tptime point
Returns
number of 100-nanosecond intervals between current date and 01/01/0001

Example:

const auto tp = utils::datetime::FromStringSaturating("2014-03-17 02:47:07.333304", "%Y-%m-%d %H:%M:%E*S");
EXPECT_EQ((int64_t)635306212273333040, ticks);

◆ Timestamp()

std::time_t utils::datetime::Timestamp ( std::chrono::system_clock::time_point  tp)
noexcept

Converts time point to std::time_t.

Example:

const auto tp = utils::datetime::UtcStringtime("2014-03-17T02:47:07+0000");
EXPECT_EQ(utils::datetime::UtcTimestring(c_time), "2014-03-17T02:47:07+0000");
EXPECT_EQ(utils::datetime::TimestampToString(c_time), "2014-03-17T02:47:07+0000");

◆ TimestampToString()

std::string utils::datetime::TimestampToString ( std::time_t  timestamp)

Returns string with time in ISO8601 format "YYYY-MM-DDTHH:MM:SS+0000".

Parameters
timestampunix timestamp

◆ Timestring() [1/2]

std::string utils::datetime::Timestring ( std::chrono::system_clock::time_point  tp,
const std::string &  timezone,
const std::string &  format = kDefaultFormat 
)

Returns time in a string of specified format, for UTC times prefer a faster utils::datetime::UtcTimestring.

Exceptions
utils::datetime::TimezoneLookupError

Example:

const auto format = "%Y-%m-%dT%H:%M:%E*S%z";
const auto time_string = utils::datetime::Timestring(std::time_t{0}, "Europe/Moscow", format); // UTC+3 zone
EXPECT_EQ(time_string, "1970-01-01T03:00:00+0300");
See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ Timestring() [2/2]

std::string utils::datetime::Timestring ( std::time_t  timestamp,
const std::string &  timezone = kDefaultTimezone,
const std::string &  format = kDefaultFormat 
)

Returns time in a string of specified format, for UTC times prefer a faster utils::datetime::UtcTimestring.

Exceptions
utils::datetime::TimezoneLookupError

Example:

const auto format = "%Y-%m-%dT%H:%M:%E*S%z";
const auto time_string = utils::datetime::Timestring(std::time_t{0}, "Europe/Moscow", format); // UTC+3 zone
EXPECT_EQ(time_string, "1970-01-01T03:00:00+0300");
See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ Unlocalize()

std::time_t utils::datetime::Unlocalize ( const cctz::civil_second &  local_tp,
const std::string &  timezone 
)

Converts a civil time in a specified timezone into an absolute time.

Exceptions
utils::datetime::TimezoneLookupError

Example:

◆ UtcStringtime()

std::chrono::system_clock::time_point utils::datetime::UtcStringtime ( const std::string &  timestring,
const std::string &  format = kDefaultFormat 
)

Extracts time point from a string of a specified format in UTC timezone.

Exceptions
utils::datetime::DateParseError
See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ UtcTimestring() [1/2]

template<class Duration >
std::string utils::datetime::UtcTimestring ( std::chrono::time_point< std::chrono::system_clock, Duration >  tp,
const std::string &  format = kDefaultFormat 
)

Returns time in a string of specified format in UTC timezone.

See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat
Exceptions
std::runtime_errorif tp does not fit into std::chrono::hours

Definition at line 125 of file datetime_light.hpp.

◆ UtcTimestring() [2/2]

std::string utils::datetime::UtcTimestring ( std::time_t  timestamp,
const std::string &  format = kDefaultFormat 
)

Returns time in a string of specified format in UTC timezone.

See also
kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch, kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat

◆ WallCoarseNow()

WallCoarseClock::time_point utils::datetime::WallCoarseNow ( )
noexcept

utils::datetime::WallCoarseClock::now() that could be mocked

Returns last time point passed to utils::datetime::MockNowSet(), or utils::datetime::WallCoarseClock::now() if the timepoint is not mocked.

◆ WriteToStream()

template<typename StringBuilder >
void utils::datetime::WriteToStream ( Date  value,
StringBuilder &  sw 
)

Definition at line 96 of file date.hpp.

Variable Documentation

◆ kDefaultDriverTimezone

const std::string utils::datetime::kDefaultDriverTimezone = "Europe/Moscow"
inline
const auto tp = utils::datetime::Stringtime(
);
EXPECT_EQ(utils::datetime::Stringtime("2014-03-17T02:47:07+0000"), tp);

Definition at line 28 of file datetime_light.hpp.

◆ kDefaultFormat

const std::string utils::datetime::kDefaultFormat = "%Y-%m-%dT%H:%M:%E*S%z"
inline
const auto exp = utils::datetime::FromStringSaturating("2014-03-17 02:47:07.000000", "%Y-%m-%d %H:%M:%E*S");
const auto tp =
EXPECT_EQ(tp, exp);

Definition at line 32 of file datetime_light.hpp.

◆ kDefaultTimezone

const std::string utils::datetime::kDefaultTimezone = "UTC"
inline
const auto tp = utils::datetime::UtcStringtime("2014-03-17T02:47:07+00:00", utils::datetime::kRfc3339Format);
EXPECT_EQ(utils::datetime::UtcStringtime("2014-03-17T02:47:07+0000"), tp);

Definition at line 30 of file datetime_light.hpp.

◆ kFractionFormat

const std::string utils::datetime::kFractionFormat = "%Y-%m-%dT%H:%M:%S.%E*f%z"
inline

Definition at line 35 of file datetime_light.hpp.

◆ kIsoFormat

const std::string utils::datetime::kIsoFormat = "%Y-%m-%dT%H:%M:%SZ"
inline
const auto exp = utils::datetime::FromStringSaturating("2014-03-17 02:47:07.000000", "%Y-%m-%d %H:%M:%E*S");
const auto tp = utils::datetime::FromStringSaturating("2014-03-17T02:47:07Z", utils::datetime::kIsoFormat);
EXPECT_EQ(tp, exp);

Definition at line 34 of file datetime_light.hpp.

◆ kRfc3339Format

const std::string utils::datetime::kRfc3339Format = "%Y-%m-%dT%H:%M:%E*S%Ez"
inline
const auto exp = utils::datetime::FromStringSaturating("2014-03-17 02:47:07.000000", "%Y-%m-%d %H:%M:%E*S");
const auto tp = utils::datetime::FromStringSaturating("2014-03-17T02:47:07+00:00", utils::datetime::kRfc3339Format);
EXPECT_EQ(tp, exp);

Definition at line 23 of file datetime_light.hpp.

◆ kStartOfTheEpoch

constexpr std::time_t utils::datetime::kStartOfTheEpoch = 0
inlineconstexpr

Definition at line 26 of file datetime_light.hpp.

◆ kTaximeterFormat

const std::string utils::datetime::kTaximeterFormat = "%Y-%m-%dT%H:%M:%E6SZ"
inline
const auto exp = utils::datetime::FromStringSaturating("2014-03-17 02:47:07.000000", "%Y-%m-%d %H:%M:%E*S");
const auto tp =
EXPECT_EQ(tp, exp);

Definition at line 25 of file datetime_light.hpp.