userver: utils::datetime Namespace Reference
Loading...
Searching...
No Matches
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.