userver: utils::datetime Namespace Reference
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
utils::datetime Namespace Reference

Date and time utilities. More...

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  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< uint8_t, uint8_t >
 

Functions

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
 
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::string Timestring (std::time_t timestamp, const std::string &timezone=kDefaultTimezone, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format.
 
std::string LocalTimezoneTimestring (std::time_t timestamp, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format.
 
std::string Timestring (std::chrono::system_clock::time_point tp, const std::string &timezone=kDefaultTimezone, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format.
 
std::string LocalTimezoneTimestring (std::chrono::system_clock::time_point tp, const std::string &format=kDefaultFormat)
 Returns time in a string of specified format.
 
std::chrono::system_clock::time_point Stringtime (const std::string &timestring, const std::string &timezone=kDefaultTimezone, const std::string &format=kDefaultFormat)
 Extracts time point from a string of a specified format.
 
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.
 
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::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 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.
 
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 Unlocalize (const cctz::civil_second &local_tp, const std::string &timezone)
 Converts a civil time in a specified timezone into an absolute time.
 
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".
 
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 (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.
 
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)
 
std::chrono::system_clock::time_point 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.
 
std::chrono::system_clock::time_point 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.
 
std::chrono::system_clock::time_point MockNow () noexcept
 
std::chrono::steady_clock::time_point MockSteadyNow () noexcept
 
void MockNowSet (std::chrono::system_clock::time_point new_mocked_now)
 
void MockSleep (std::chrono::seconds duration)
 
void MockSleep (std::chrono::milliseconds duration)
 
void MockNowUnset ()
 
bool IsMockNow ()
 
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"
 

Detailed Description

Date and time utilities.

Typedef Documentation

◆ timepair_t

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

Definition at line 27 of file datetime.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 157 of file datetime.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

◆ 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

◆ 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.

Exceptions
utils::datetime::DateParseError

◆ 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 129 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 135 of file time_of_day.hpp.

◆ operator-() [2/2]

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

Definition at line 124 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 97 of file date.hpp.

◆ operator<<() [2/2]

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

Definition at line 142 of file time_of_day.hpp.

◆ 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 68 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 87 of file date.hpp.

◆ SteadyNow()

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

std::chrono::steady_clock::now() that could be 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()

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

◆ TimePointToTicks()

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

Convert time_point to DotNet ticks.

Parameters
timepoint day time
Returns
number of 100nanosec intervals between current date and 01/01/0001

◆ 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 = kDefaultTimezone,
const std::string &  format = kDefaultFormat 
)

Returns time in a string of specified format.

Exceptions
utils::datetime::TimezoneLookupError

◆ Timestring() [2/2]

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

◆ 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

◆ WriteToStream()

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

Definition at line 93 of file date.hpp.