Sourcemeta Core 0.0.0
Loading...
Searching...
No Matches
time.h
1#ifndef SOURCEMETA_CORE_TIME_H_
2#define SOURCEMETA_CORE_TIME_H_
3
4#ifndef SOURCEMETA_CORE_TIME_EXPORT
5#include <sourcemeta/core/time_export.h>
6#endif
7
8#include <array> // std::array
9#include <cassert> // assert
10#include <chrono> // std::chrono::system_clock::time_point
11#include <cstdint> // std::uint8_t, std::uint16_t
12#include <optional> // std::optional
13#include <string> // std::string
14#include <string_view> // std::string_view
15
25
26namespace sourcemeta::core {
27
39SOURCEMETA_CORE_TIME_EXPORT
40auto to_imf_fixdate(const std::chrono::system_clock::time_point time)
41 -> std::string;
42
59SOURCEMETA_CORE_TIME_EXPORT
60auto from_imf_fixdate(const std::string_view value) noexcept
61 -> std::optional<std::chrono::system_clock::time_point>;
62
74SOURCEMETA_CORE_TIME_EXPORT
75auto to_rfc850_date(const std::chrono::system_clock::time_point time)
76 -> std::string;
77
95SOURCEMETA_CORE_TIME_EXPORT
96auto from_rfc850_date(const std::string_view value) noexcept
97 -> std::optional<std::chrono::system_clock::time_point>;
98
111SOURCEMETA_CORE_TIME_EXPORT
112auto to_asctime(const std::chrono::system_clock::time_point time)
113 -> std::string;
114
132SOURCEMETA_CORE_TIME_EXPORT
133auto from_asctime(const std::string_view value) noexcept
134 -> std::optional<std::chrono::system_clock::time_point>;
135
147SOURCEMETA_CORE_TIME_EXPORT
148auto to_iso8601_basic(const std::chrono::system_clock::time_point time)
149 -> std::string;
150
162SOURCEMETA_CORE_TIME_EXPORT
163auto from_iso8601_basic(const std::string_view value) noexcept
164 -> std::optional<std::chrono::system_clock::time_point>;
165
183SOURCEMETA_CORE_TIME_EXPORT
184auto from_unix_timestamp(const std::chrono::duration<double> seconds) noexcept
185 -> std::optional<std::chrono::system_clock::time_point>;
186
200SOURCEMETA_CORE_TIME_EXPORT
202 const std::chrono::system_clock::time_point time) noexcept
203 -> std::chrono::duration<double>;
204
220SOURCEMETA_CORE_TIME_EXPORT
221auto clock_shift_backward(const std::chrono::system_clock::time_point time,
222 const std::chrono::seconds span) noexcept
223 -> std::chrono::system_clock::time_point;
224
240SOURCEMETA_CORE_TIME_EXPORT
241auto clock_shift_forward(const std::chrono::system_clock::time_point time,
242 const std::chrono::seconds span) noexcept
243 -> std::chrono::system_clock::time_point;
244
267SOURCEMETA_CORE_TIME_EXPORT
268auto is_rfc3339_datetime(const std::string_view value) -> bool;
269
292SOURCEMETA_CORE_TIME_EXPORT
293auto is_rfc3339_fulldate(const std::string_view value) -> bool;
294
319SOURCEMETA_CORE_TIME_EXPORT
320auto is_rfc3339_fulltime(const std::string_view value) -> bool;
321
346SOURCEMETA_CORE_TIME_EXPORT
347auto is_rfc3339_partialtime_no_secfrac(const std::string_view value) -> bool;
348
372SOURCEMETA_CORE_TIME_EXPORT
373auto is_rfc3339_duration(const std::string_view value) -> bool;
374
389inline constexpr auto is_leap_year(const std::uint16_t year) -> bool {
390 return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0);
391}
392
407inline constexpr auto max_day_in_month(const std::uint8_t month,
408 const std::uint16_t year)
409 -> std::uint8_t {
410 assert(month >= 1 && month <= 12);
411 constexpr std::array<std::uint8_t, 13> days{
412 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
413 if (month == 2 && is_leap_year(year)) {
414 return 29;
415 }
416 return days[month];
417}
418
419} // namespace sourcemeta::core
420
421#endif
SOURCEMETA_CORE_TIME_EXPORT auto clock_shift_forward(const std::chrono::system_clock::time_point time, const std::chrono::seconds span) noexcept -> std::chrono::system_clock::time_point
SOURCEMETA_CORE_TIME_EXPORT auto is_rfc3339_fulldate(const std::string_view value) -> bool
SOURCEMETA_CORE_TIME_EXPORT auto to_iso8601_basic(const std::chrono::system_clock::time_point time) -> std::string
SOURCEMETA_CORE_TIME_EXPORT auto to_unix_timestamp(const std::chrono::system_clock::time_point time) noexcept -> std::chrono::duration< double >
SOURCEMETA_CORE_TIME_EXPORT auto is_rfc3339_datetime(const std::string_view value) -> bool
SOURCEMETA_CORE_TIME_EXPORT auto to_imf_fixdate(const std::chrono::system_clock::time_point time) -> std::string
SOURCEMETA_CORE_TIME_EXPORT auto to_rfc850_date(const std::chrono::system_clock::time_point time) -> std::string
SOURCEMETA_CORE_TIME_EXPORT auto to_asctime(const std::chrono::system_clock::time_point time) -> std::string
SOURCEMETA_CORE_TIME_EXPORT auto from_iso8601_basic(const std::string_view value) noexcept -> std::optional< std::chrono::system_clock::time_point >
SOURCEMETA_CORE_TIME_EXPORT auto is_rfc3339_partialtime_no_secfrac(const std::string_view value) -> bool
SOURCEMETA_CORE_TIME_EXPORT auto from_unix_timestamp(const std::chrono::duration< double > seconds) noexcept -> std::optional< std::chrono::system_clock::time_point >
constexpr auto is_leap_year(const std::uint16_t year) -> bool
Definition time.h:389
SOURCEMETA_CORE_TIME_EXPORT auto from_rfc850_date(const std::string_view value) noexcept -> std::optional< std::chrono::system_clock::time_point >
SOURCEMETA_CORE_TIME_EXPORT auto from_asctime(const std::string_view value) noexcept -> std::optional< std::chrono::system_clock::time_point >
SOURCEMETA_CORE_TIME_EXPORT auto is_rfc3339_duration(const std::string_view value) -> bool
SOURCEMETA_CORE_TIME_EXPORT auto clock_shift_backward(const std::chrono::system_clock::time_point time, const std::chrono::seconds span) noexcept -> std::chrono::system_clock::time_point
constexpr auto max_day_in_month(const std::uint8_t month, const std::uint16_t year) -> std::uint8_t
Definition time.h:407
SOURCEMETA_CORE_TIME_EXPORT auto is_rfc3339_fulltime(const std::string_view value) -> bool
SOURCEMETA_CORE_TIME_EXPORT auto from_imf_fixdate(const std::string_view value) noexcept -> std::optional< std::chrono::system_clock::time_point >