summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Gildea <stepheng+emacs@gildea.com>2019-11-06 08:31:48 -0800
committerStephen Gildea <stepheng+emacs@gildea.com>2019-11-06 08:33:51 -0800
commit9ce67baa9a3733ae93885b6242130497b13c8703 (patch)
tree8041bf428f56c53d6a2c2dfd62c6585370be6866
parentda2df1c1b5b5a7373f361875b43dd003a221e2e0 (diff)
downloademacs-9ce67baa9a3733ae93885b6242130497b13c8703.tar.gz
time-stamp: add support for time zone numeric offset
* time-stamp.el: Implement %:z as expanding to the numeric time zone offset, to address the feature request of bug#32931. Do not document it yet, to discourage compatibility problems in mixed Emacs 26 and Emacs 27 environments. Documentation will be added in a subsequent release at least two years later. (We cannot yet use %z for numeric time zone because in Emacs 26 it was documented to do something else.) * time-stamp-tests.el (time-stamp-test-format-time-zone): expand this test and break it into two tests, time-stamp-test-format-time-zone-name and time-stamp-test-format-time-zone-offset.
-rw-r--r--lisp/time-stamp.el8
-rw-r--r--test/lisp/time-stamp-tests.el23
2 files changed, 24 insertions, 7 deletions
diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el
index 6b1ff3e618c..55892cdb83c 100644
--- a/lisp/time-stamp.el
+++ b/lisp/time-stamp.el
@@ -570,11 +570,13 @@ and all `time-stamp-format' compatibility."
(string-to-number (time-stamp--format "%Y" time)))))
((eq cur-char ?Y) ;4-digit year
(string-to-number (time-stamp--format "%Y" time)))
- ((eq cur-char ?z) ;time zone lower case
+ ((eq cur-char ?z) ;time zone offset
(if change-case
"" ;discourage %z variations
- (time-stamp--format "%#Z" time)))
- ((eq cur-char ?Z)
+ (if alt-form
+ (time-stamp--format "%z" time)
+ (time-stamp--format "%#Z" time)))) ;backward compat, will change
+ ((eq cur-char ?Z) ;time zone name
(if change-case
(time-stamp--format "%#Z" time)
(time-stamp--format "%Z" time)))
diff --git a/test/lisp/time-stamp-tests.el b/test/lisp/time-stamp-tests.el
index ad2cb0ead7f..77cd6c5b945 100644
--- a/test/lisp/time-stamp-tests.el
+++ b/test/lisp/time-stamp-tests.el
@@ -299,18 +299,33 @@
(should (equal (time-stamp-string "%w" ref-time2) "5"))
(should (equal (time-stamp-string "%w" ref-time3) "0"))))
-(ert-deftest time-stamp-test-format-time-zone ()
- "Test time-stamp formats for time zone."
+(ert-deftest time-stamp-test-format-time-zone-name ()
+ "Test time-stamp format %Z."
(with-time-stamp-test-env
(let ((UTC-abbr (format-time-string "%Z" ref-time1 t))
(utc-abbr (format-time-string "%#Z" ref-time1 t)))
;; implemented and documented since 1995
(should (equal (time-stamp-string "%Z" ref-time1) UTC-abbr))
- ;; documented 1995-2019
- (should (equal (time-stamp-string "%z" ref-time1) utc-abbr))
;; implemented since 1997, documented since 2019
(should (equal (time-stamp-string "%#Z" ref-time1) utc-abbr)))))
+(ert-deftest time-stamp-test-format-time-zone-offset ()
+ "Test time-stamp format %z."
+ (with-time-stamp-test-env
+ ;; documented 1995-2019, will change
+ (should (equal (time-stamp-string "%z" ref-time1)
+ (format-time-string "%#Z" ref-time1 t)))
+ ;; undocumented, changed in 2019
+ (should (equal (time-stamp-string "%:z" ref-time1) "+0000"))
+ (should (equal (time-stamp-string "%:7z" ref-time1) " +0000"))
+ (should (equal (time-stamp-string "%:07z" ref-time1) " +0000"))
+ (let ((time-stamp-time-zone "PST8"))
+ (should (equal (time-stamp-string "%:z" ref-time1) "-0800")))
+ (let ((time-stamp-time-zone "HST10"))
+ (should (equal (time-stamp-string "%:z" ref-time1) "-1000")))
+ (let ((time-stamp-time-zone "CET-1"))
+ (should (equal (time-stamp-string "%:z" ref-time1) "+0100")))))
+
(ert-deftest time-stamp-test-format-non-date-conversions ()
"Test time-stamp formats for non-date items."
(with-time-stamp-test-env