summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/calendar/time-date.el4
-rw-r--r--test/lisp/calendar/time-date-tests.el7
2 files changed, 11 insertions, 0 deletions
diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el
index 35c89a2ceac..ef6e9bc1bf7 100644
--- a/lisp/calendar/time-date.el
+++ b/lisp/calendar/time-date.el
@@ -421,6 +421,10 @@ changes in daylight saving time are not taken into account."
(setq seconds (+ (* (or (decoded-time-hour delta) 0) 3600)
(* (or (decoded-time-minute delta) 0) 60)
(or (decoded-time-second delta) 0)))
+
+ ;; Time zone adjustments are basically the same as time adjustments.
+ (setq seconds (+ seconds (or (decoded-time-zone delta) 0)))
+
(cond
((> seconds 0)
(decoded-time--alter-second time seconds t))
diff --git a/test/lisp/calendar/time-date-tests.el b/test/lisp/calendar/time-date-tests.el
index 02df0cd8ad7..d6cf742bc53 100644
--- a/test/lisp/calendar/time-date-tests.el
+++ b/test/lisp/calendar/time-date-tests.el
@@ -97,6 +97,13 @@
'(12 15 16 9 7 2019 1 t 7200)))
))
+(ert-deftest test-decoded-add-zone ()
+ (let ((time '(12 15 16 8 7 2019 1 t 7200)))
+ (should (equal (decoded-time-add time (mdec :zone -3600))
+ '(12 15 15 8 7 2019 1 t 7200)))
+ (should (equal (decoded-time-add time (mdec :zone -7200))
+ '(12 15 14 8 7 2019 1 t 7200)))))
+
(require 'ert)
;;; time-date-tests.el ends here