From 46df7bbe12cce4c9af7ce4357aa9f8d36c1d8933 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 30 Jul 2019 16:56:12 +0200 Subject: [PATCH] Add new function time-zone-format * lisp/calendar/time-date.el (time-zone-format): New function. --- etc/NEWS | 4 ++++ lisp/calendar/time-date.el | 10 ++++++++++ test/lisp/calendar/time-date-tests.el | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 486e677539d..e1ac4eb9337 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2110,6 +2110,10 @@ doing computations on a decoded time structure), 'make-decoded-time' filled out), and 'encoded-time-set-defaults' (which fills in nil elements as if it's midnight January 1st, 1970) have been added. +*** The new function `time-zone-format' has been added to format +Emacs time zones (which are in seconds) according to many standards +(i.e., "+01:00"). + ** 'define-minor-mode' automatically documents the meaning of ARG. +++ diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el index f14478e67cc..efc9ae4e3b9 100644 --- a/lisp/calendar/time-date.el +++ b/lisp/calendar/time-date.el @@ -352,6 +352,16 @@ is output until the first non-zero unit is encountered." (<= (car here) delay))) (concat (format "%.2f" (/ delay (car (cddr here)))) (cadr here)))))) +(defun time-zone-format (seconds) + "Format SECONDS as a valid time zone string. +For instance, 3600 is \"+01:00\"." + (format "%s%02d:%02d" + (if (< seconds 0) + "-" + "+") + (/ (abs seconds) 3600) + (mod (abs seconds) 3600))) + (defun date-days-in-month (year month) "The number of days in MONTH in YEAR." (if (= month 2) diff --git a/test/lisp/calendar/time-date-tests.el b/test/lisp/calendar/time-date-tests.el index b46a247cd30..51250ce5e7a 100644 --- a/test/lisp/calendar/time-date-tests.el +++ b/test/lisp/calendar/time-date-tests.el @@ -104,6 +104,12 @@ (should (equal (decoded-time-add time (mdec :zone -7200)) '(12 15 14 8 7 2019 1 t 7200))))) +(ert-deftest test-time-zone-format () + (should (equal (time-zone-format 3600) + "+01:00")) + (should (equal (time-zone-format -7200) + "-02:00"))) + (require 'ert) ;;; time-date-tests.el ends here -- 2.39.2