userver: userver/utils/datetime.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
datetime.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/utils/datetime.hpp
4/// @brief Date, Time, and Timezone related converters
5/// @ingroup userver_universal
6
7#include <userver/utils/datetime_light.hpp>
8
9USERVER_NAMESPACE_BEGIN
10
11namespace utils::datetime {
12
13/// @brief Returns time in a string of specified format, for UTC times prefer a faster utils::datetime::UtcTimestring
14///
15/// @throws utils::datetime::TimezoneLookupError
16///
17/// Example:
18///
19/// @snippet utils/datetime_test.cpp Timestring example
20///
21/// @see kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch,
22/// kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat
23std::string Timestring(
24 std::time_t timestamp,
25 const std::string& timezone = kDefaultTimezone,
26 const std::string& format = kDefaultFormat
27);
28
29/// @brief Returns time in a string of specified format, for UTC times prefer a faster utils::datetime::UtcTimestring
30/// @throws utils::datetime::TimezoneLookupError
31///
32/// Example:
33///
34/// @snippet utils/datetime_test.cpp Timestring example
35/// @see kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch,
36/// kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat
37std::string Timestring(
38 std::chrono::system_clock::time_point tp,
39 const std::string& timezone,
40 const std::string& format = kDefaultFormat
41);
42
43/// @brief Extracts time point from a string of a specified format, for UTC times prefer a faster
44/// utils::datetime::UtcStringtime
45///
46/// @throws utils::datetime::DateParseError
47/// @throws utils::datetime::TimezoneLookupError
48///
49/// Example:
50///
51/// @snippet utils/datetime_test.cpp Stringtime example
52/// @see kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch,
53/// kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat
54std::chrono::system_clock::time_point
55Stringtime(const std::string& timestring, const std::string& timezone, const std::string& format = kDefaultFormat);
56
57/// @brief Extracts time point from a string, guessing the format
58/// @throws utils::datetime::DateParseError
59/// @throws utils::datetime::TimezoneLookupError
60///
61/// Example:
62///
63/// @snippet utils/datetime_test.cpp GuessStringtime example
64std::chrono::system_clock::time_point GuessStringtime(const std::string& timestamp, const std::string& timezone);
65
66/// @brief Returns optional time in a string of specified format
67///
68/// Example:
69///
70/// @snippet utils/datetime_test.cpp OptionalStringtime example
71/// @see kRfc3339Format, kTaximeterFormat, kStartOfTheEpoch,
72/// kDefaultDriverTimezone, kDefaultTimezone, kDefaultFormat, kIsoFormat
73std::optional<std::chrono::system_clock::time_point> OptionalStringtime(
74 const std::string& timestring,
75 const std::string& timezone,
76 const std::string& format = kDefaultFormat
77);
78
79/// @brief Converts absolute time in std::chrono::system_clock::time_point to
80/// a civil time of a particular timezone.
81/// @throws utils::datetime::TimezoneLookupError
82///
83/// Example:
84///
85/// @snippet utils/datetime_test.cpp Localize example
86cctz::civil_second Localize(const std::chrono::system_clock::time_point& tp, const std::string& timezone);
87
88/// @brief Converts a civil time in a specified timezone into an absolute time.
89/// @throws utils::datetime::TimezoneLookupError
90///
91/// Example:
92///
93/// @snippet utils/datetime_test.cpp Localize example
94std::time_t Unlocalize(const cctz::civil_second& local_tp, const std::string& timezone);
95
96} // namespace utils::datetime
97
98USERVER_NAMESPACE_END