Skip to content

Commit

Permalink
Fix time_point formatting for durations with certain ratios (#3430)
Browse files Browse the repository at this point in the history
* Fix time_point formatting

* Add timestamps_ratios tests
  • Loading branch information
patlkli authored May 11, 2023
1 parent ebfb2e6 commit d7592ad
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
3 changes: 2 additions & 1 deletion include/fmt/chrono.h
Original file line number Diff line number Diff line change
Expand Up @@ -2142,7 +2142,8 @@ struct formatter<std::chrono::time_point<std::chrono::system_clock, Duration>,
epoch - std::chrono::duration_cast<std::chrono::seconds>(epoch));

if (subsecs.count() < 0) {
auto second = std::chrono::seconds(1);
auto second = std::chrono::duration_cast<Duration>(
std::chrono::seconds(1));
if (epoch.count() < ((Duration::min)() + second).count())
FMT_THROW(format_error("duration is too small"));
subsecs += second;
Expand Down
24 changes: 24 additions & 0 deletions test/chrono-test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,30 @@ TEST(chrono_test, utc_clock) {
}
#endif

TEST(chrono_test, timestamps_ratios) {
std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>
t1(std::chrono::milliseconds(67890));

EXPECT_EQ(fmt::format("{:%M:%S}", t1), "01:07.890");

std::chrono::time_point<std::chrono::system_clock, std::chrono::minutes>
t2(std::chrono::minutes(7));

EXPECT_EQ(fmt::format("{:%M:%S}", t2), "07:00");

std::chrono::time_point<std::chrono::system_clock,
std::chrono::duration<int, std::ratio<9>>>
t3(std::chrono::duration<int, std::ratio<9>>(7));

EXPECT_EQ(fmt::format("{:%M:%S}", t3), "01:03");

std::chrono::time_point<std::chrono::system_clock,
std::chrono::duration<int, std::ratio<63>>>
t4(std::chrono::duration<int, std::ratio<63>>(1));

EXPECT_EQ(fmt::format("{:%M:%S}", t4), "01:03");
}

TEST(chrono_test, timestamps_sub_seconds) {
std::chrono::time_point<std::chrono::system_clock,
std::chrono::duration<long long, std::ratio<1, 3>>>
Expand Down

0 comments on commit d7592ad

Please sign in to comment.