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

Reply via email to