Improve handling of negative durations

This commit is contained in:
Victor Zverovich 2019-05-04 16:33:17 -07:00
parent 38a85502ed
commit c1d430e61a
2 changed files with 12 additions and 5 deletions

View File

@ -430,11 +430,14 @@ struct chrono_formatter {
explicit chrono_formatter(FormatContext& ctx, OutputIt o,
std::chrono::duration<Rep, Period> d)
: context(ctx),
out(o),
val(d.count()),
s(std::chrono::duration_cast<seconds>(d)),
ms(std::chrono::duration_cast<milliseconds>(d - s)) {}
: context(ctx), out(o), val(d.count()) {
if (d.count() < 0) {
d = -d;
*out++ = '-';
}
s = std::chrono::duration_cast<seconds>(d);
ms = std::chrono::duration_cast<milliseconds>(d - s);
}
int hour() const { return to_int(mod((s.count() / 3600), 24)); }

View File

@ -310,4 +310,8 @@ TEST(ChronoTest, LargeDuration) {
EXPECT_EQ("40", fmt::format("{:%S}", std::chrono::duration<double>(1e20)));
}
TEST(ChronoTest, NegativeDuration) {
EXPECT_EQ("-00:01", fmt::format("{:%M:%S}", std::chrono::duration<double>(-1)));
}
#endif // FMT_STATIC_THOUSANDS_SEPARATOR