From 0500d49acb132f57a4bb4e5a8e7b86e9c7d61710 Mon Sep 17 00:00:00 2001 From: cflip Date: Tue, 12 Apr 2022 17:53:04 -0600 Subject: [PATCH] LibC+LibCore: Properly format 12-hour formatted hours This fixes a small formatting issue where midnight and noon would display as 00 when they should display as 12. --- Userland/Libraries/LibC/time.cpp | 16 ++++++++++++---- Userland/Libraries/LibCore/DateTime.cpp | 16 ++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Userland/Libraries/LibC/time.cpp b/Userland/Libraries/LibC/time.cpp index c28351c97a..a2a7b4eee8 100644 --- a/Userland/Libraries/LibC/time.cpp +++ b/Userland/Libraries/LibC/time.cpp @@ -250,9 +250,13 @@ size_t strftime(char* destination, size_t max_size, char const* format, const st case 'H': builder.appendff("{:02}", tm->tm_hour); break; - case 'I': - builder.appendff("{:02}", tm->tm_hour % 12); + case 'I': { + int display_hour = tm->tm_hour % 12; + if (display_hour == 0) + display_hour = 12; + builder.appendff("{:02}", display_hour); break; + } case 'j': builder.appendff("{:03}", tm->tm_yday + 1); break; @@ -268,9 +272,13 @@ size_t strftime(char* destination, size_t max_size, char const* format, const st case 'p': builder.append(tm->tm_hour < 12 ? "a.m." : "p.m."); break; - case 'r': - builder.appendff("{:02}:{:02}:{:02} {}", tm->tm_hour % 12, tm->tm_min, tm->tm_sec, tm->tm_hour < 12 ? "a.m." : "p.m."); + case 'r': { + int display_hour = tm->tm_hour % 12; + if (display_hour == 0) + display_hour = 12; + builder.appendff("{:02}:{:02}:{:02} {}", display_hour, tm->tm_min, tm->tm_sec, tm->tm_hour < 12 ? "a.m." : "p.m."); break; + } case 'R': builder.appendff("{:02}:{:02}", tm->tm_hour, tm->tm_min); break; diff --git a/Userland/Libraries/LibCore/DateTime.cpp b/Userland/Libraries/LibCore/DateTime.cpp index 41c1b7f78c..479c433dfa 100644 --- a/Userland/Libraries/LibCore/DateTime.cpp +++ b/Userland/Libraries/LibCore/DateTime.cpp @@ -153,9 +153,13 @@ String DateTime::to_string(StringView format) const case 'H': builder.appendff("{:02}", tm.tm_hour); break; - case 'I': - builder.appendff("{:02}", tm.tm_hour % 12); + case 'I': { + int display_hour = tm.tm_hour % 12; + if (display_hour == 0) + display_hour = 12; + builder.appendff("{:02}", display_hour); break; + } case 'j': builder.appendff("{:03}", tm.tm_yday + 1); break; @@ -171,9 +175,13 @@ String DateTime::to_string(StringView format) const case 'p': builder.append(tm.tm_hour < 12 ? "a.m." : "p.m."); break; - case 'r': - builder.appendff("{:02}:{:02}:{:02} {}", tm.tm_hour % 12, tm.tm_min, tm.tm_sec, tm.tm_hour < 12 ? "a.m." : "p.m."); + case 'r': { + int display_hour = tm.tm_hour % 12; + if (display_hour == 0) + display_hour = 12; + builder.appendff("{:02}:{:02}:{:02} {}", display_hour, tm.tm_min, tm.tm_sec, tm.tm_hour < 12 ? "a.m." : "p.m."); break; + } case 'R': builder.appendff("{:02}:{:02}", tm.tm_hour, tm.tm_min); break;