On a GNU/Linux system, we have the following:
$ LC_ALL=en_US.UTF-8 date -u -d 1:00
Sun Dec 14 01:00:00 AM UTC 2025
$ LC_ALL=en_US.UTF-8 locale date_fmt
%a %b %e %r %Z %Y
$ LC_ALL=en_US.UTF-8 locale t_fmt_ampm
%I:%M:%S %p
$ LC_ALL=nl_NL.UTF-8 date -u -d 1:00
zo 14 dec 2025 1:00:00 UTC
$ LC_ALL=nl_NL.UTF-8 locale date_fmt
%a %e %b %Y %k:%M:%S %Z
We respect the locales preference for a leading zero or leading space in
single digit hours.
* tests/date/date-locale-hour.sh: Check that the locales preference for
leading zeros or spaces in single digit hours is used.
---
tests/date/date-locale-hour.sh | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/tests/date/date-locale-hour.sh b/tests/date/date-locale-hour.sh
index 7e0d12019..1f44bc3eb 100755
--- a/tests/date/date-locale-hour.sh
+++ b/tests/date/date-locale-hour.sh
@@ -34,6 +34,23 @@ for loc in "$LOCALE_FR_UTF8" 'en_US.UTF-8'; do
*"$compare_time"*) ;;
*) fail=1 ;;
esac
+
+ # The use of %r requires checking 'locale t_fmt_ampm' for the format.
+ fmt=$(LC_ALL="$loc" locale date_fmt)
+ case "$fmt" in
+ *%r*) fmt=$(LC_ALL="$loc" locale t_fmt_ampm) ;;
+ esac
+
+ case "$fmt" in
+ *%[IHRT]*) compare_time='01:00' ;;
+ *%[lk]*) compare_time=' 1:00' ;;
+ *) skip_ 'unrecognised locale hour format';;
+ esac
+
+ case $(LC_ALL="$loc" date -d '2025-10-11T01:00') in
+ *"$compare_time"*) ;;
+ *) fail=1 ;;
+ esac
done
--
2.52.0