]> git.eshelyaron.com Git - emacs.git/commitdiff
time-stamp: add support for time zone numeric offset
authorStephen Gildea <stepheng+emacs@gildea.com>
Wed, 6 Nov 2019 16:31:48 +0000 (08:31 -0800)
committerStephen Gildea <stepheng+emacs@gildea.com>
Wed, 6 Nov 2019 16:33:51 +0000 (08:33 -0800)
* 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.

lisp/time-stamp.el
test/lisp/time-stamp-tests.el

index 6b1ff3e618cf53b6626afa0bfe71a11c5bc9036e..55892cdb83c96444189e50249ca3dce437b41d92 100644 (file)
@@ -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)))
index ad2cb0ead7fc00d1c8077a0f18dc97807437ee94..77cd6c5b94551973bfd69592c2348157706b4d07 100644 (file)
     (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