diff --git a/include/fmt/chrono.h b/include/fmt/chrono.h index 8bd16805..4b1804da 100644 --- a/include/fmt/chrono.h +++ b/include/fmt/chrono.h @@ -894,13 +894,13 @@ struct chrono_formatter { void write_pinf() { std::copy_n("inf", 3, out); } void write_ninf() { std::copy_n("-inf", 4, out); } - void format_localized(const tm& time, const char* format) { + void format_localized(const tm& time, char format, char modifier = 0) { if (isnan(val)) return write_nan(); auto locale = context.locale().template get(); auto& facet = std::use_facet>(locale); std::basic_ostringstream os; os.imbue(locale); - facet.put(os, os, ' ', &time, format, format + std::char_traits::length(format)); + facet.put(os, os, ' ', &time, format, modifier); auto str = os.str(); std::copy(str.begin(), str.end(), out); } @@ -930,8 +930,7 @@ struct chrono_formatter { if (ns == numeric_system::standard) return write(hour(), 2); auto time = tm(); time.tm_hour = to_nonnegative_int(hour(), 24); - const char_type format[] { '%', 'O', 'H', 0 }; - format_localized(time, format); + format_localized(time, 'H', 'O'); } void on_12_hour(numeric_system ns) { @@ -940,8 +939,7 @@ struct chrono_formatter { if (ns == numeric_system::standard) return write(hour12(), 2); auto time = tm(); time.tm_hour = to_nonnegative_int(hour12(), 12); - const char_type format[] { '%', 'O', 'I', 0 }; - format_localized(time, format); + format_localized(time, 'I', 'O'); } void on_minute(numeric_system ns) { @@ -950,8 +948,7 @@ struct chrono_formatter { if (ns == numeric_system::standard) return write(minute(), 2); auto time = tm(); time.tm_min = to_nonnegative_int(minute(), 60); - const char_type format[] { '%', 'O', 'M', 0 }; - format_localized(time, format); + format_localized(time, 'M', 'O'); } void on_second(numeric_system ns) { @@ -976,14 +973,12 @@ struct chrono_formatter { } auto time = tm(); time.tm_sec = to_nonnegative_int(second(), 60); - const char_type format[] { '%', 'O', 'S', 0 }; - format_localized(time, format); + format_localized(time, 'S', 'O'); } void on_12_hour_time() { if (handle_nan_inf()) return; - const char_type format[] { '%', 'r', 0 }; - format_localized(time(), format); + format_localized(time(), 'r'); } void on_24_hour_time() { @@ -1007,8 +1002,7 @@ struct chrono_formatter { void on_am_pm() { if (handle_nan_inf()) return; - const char_type format[] { '%', 'p', 0 }; - format_localized(time(), format); + format_localized(time(), 'p'); } void on_duration_value() {