From: Eli Zaretskii Date: Wed, 10 Apr 2024 14:00:34 +0000 (+0300) Subject: Fix 'format-seconds' when all values are zero and %z is used X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=056d784c8fb55cd737969f5ec2bc2d77f6c4153c;p=emacs.git Fix 'format-seconds' when all values are zero and %z is used * lisp/calendar/time-date.el (format-seconds): Fix all-zero time. * test/lisp/calendar/time-date-tests.el (test-format-seconds): Add two new tests. (Bug#70322) (cherry picked from commit 33516970808a6c50709325edfc1af125c2b2c401) --- diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el index e96e2e7e2db..eca80f1e8b6 100644 --- a/lisp/calendar/time-date.el +++ b/lisp/calendar/time-date.el @@ -344,8 +344,11 @@ right of \"%x\", trailing zero units are not output." string) (cond ((string-equal spec "z") - (setq chop-leading (and leading-zeropos - (min leading-zeropos (match-beginning 0))))) + (setq chop-leading + (if leading-zeropos + (min leading-zeropos (match-beginning 0)) + ;; The entire spec is zero, get past "%z" to last 0. + (+ 2 (match-beginning 0))))) ((string-equal spec "x") (setq chop-trailing t)) (t diff --git a/test/lisp/calendar/time-date-tests.el b/test/lisp/calendar/time-date-tests.el index 01f9f8a5108..6512dd0bd07 100644 --- a/test/lisp/calendar/time-date-tests.el +++ b/test/lisp/calendar/time-date-tests.el @@ -100,7 +100,10 @@ (should (equal (format-seconds "%hh %z%x%mm %ss" (* 60 2)) "2m")) (should (equal (format-seconds "%hh %z%mm %ss" (* 60 2)) "2m 0s")) (should (equal (format-seconds "%hh %x%mm %ss" (* 60 2)) "0h 2m")) - (should (equal (format-seconds "%hh %x%mm %ss" 0) "0h 0m 0s"))) + (should (equal (format-seconds "%hh %x%mm %ss" 0) "0h 0m 0s")) + ;; Bug#70322 + (should (equal (format-seconds "%y %z%d %h %m %s %%" 9999999) "115 17 46 39 %")) + (should (equal (format-seconds "%Y, %D, %H, %M, %z%S" 0) "0 seconds"))) (ert-deftest test-ordinal () (should (equal (date-ordinal-to-time 2008 271)