23 #include <string_view>
25 #if __cpp_lib_chrono >= 201907L
26 #define CPP20_CHRONO_SUPPORT
31 #ifdef CPP20_CHRONO_SUPPORT
40 using days = std::chrono::duration<int, std::ratio<86400>>;
41 using weeks = std::chrono::duration<int, std::ratio<604800>>;
42 using months = std::chrono::duration<int, std::ratio<2629746>>;
43 using years = std::chrono::duration<int, std::ratio<31556952>>;
49 return std::chrono::system_clock::from_time_t(val);
54 return std::chrono::system_clock::from_time_t(val.
to_long_long());
59 return std::chrono::system_clock::to_time_t(time);
64 std::ostringstream ss;
65 auto as_time_t = std::chrono::system_clock::to_time_t(time);
66 ss << std::put_time(std::localtime(&as_time_t),
format.data());
70 template<
typename Duration>
76 template<
typename RepE,
typename PeriodE,
typename RepD,
typename PeriodD>
78 const std::chrono::duration<RepE, PeriodE>& elapsed,
79 const std::chrono::duration<RepD, PeriodD>& duration)
81 return std::clamp(std::chrono::duration<double, PeriodE>{elapsed} / duration, 0.0, 1.0);
84 template<
typename... Ts,
typename Rep,
typename Period>
85 constexpr
auto deconstruct_duration(
const std::tuple<Ts...>&,
const std::chrono::duration<Rep, Period>& span)
87 auto time_remaining = std::chrono::duration_cast<std::common_type_t<Ts...>>(span);
88 return std::tuple{[&time_remaining]() {
89 auto duration = std::chrono::duration_cast<Ts>(time_remaining);
90 time_remaining -= duration;
101 std::chrono::minutes,
Variant for storing WML attributes.
long long to_long_long(long long def=0) const
Definitions for the interface to Wesnoth Markup Language (WML).
std::chrono::duration< int, std::ratio< 2629746 > > months
auto serialize_timestamp(const std::chrono::system_clock::time_point &time)
auto parse_timestamp(long long val)
auto parse_duration(const config_attribute_value &val, const Duration &def=Duration{0})
auto format_local_timestamp(const std::chrono::system_clock::time_point &time, std::string_view format="%F %T")
std::chrono::duration< int, std::ratio< 31556952 > > years
std::chrono::duration< int, std::ratio< 604800 > > weeks
constexpr auto deconstruct_duration(const std::tuple< Ts... > &, const std::chrono::duration< Rep, Period > &span)
std::chrono::duration< int, std::ratio< 86400 > > days
constexpr double normalize_progress(const std::chrono::duration< RepE, PeriodE > &elapsed, const std::chrono::duration< RepD, PeriodD > &duration)