https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120293
Bug ID: 120293 Summary: std::format("{}", std::chrono::sys_days()) should not include time-of-day Product: gcc Version: 14.2.1 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- std::format("{}", std::chrono::sys_days()) should be "1970-01-01" but we currently produce "1970-01-01 00:00:00" This fixes it: --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -766,6 +766,9 @@ namespace __format // sys_time with period greater or equal to days: if constexpr (is_convertible_v<_Tp, chrono::sys_days>) __os << _S_date(__t); + // Or a local_time with period greater or equal to days: + else if constexpr (is_convertible_v<_Tp, chrono::local_days>) + __os << _S_date(__t); else // Or it's formatted as "{:L%F %T}": { auto __days = chrono::floor<chrono::days>(__t);