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);