summaryrefslogtreecommitdiff
path: root/lisp/calendar/time-date.el
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2020-01-24 13:36:56 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2020-01-24 13:41:56 -0800
commita391ffa2f0377306449b36cc62858db823d2e990 (patch)
tree6b4c1723452ea8ec3ce456278f964626df209275 /lisp/calendar/time-date.el
parent9c576c207a8f4f98fd89deb4f3b4bfbe1ad37e37 (diff)
downloademacs-a391ffa2f0377306449b36cc62858db823d2e990.tar.gz
Fix iso8601-parse so unknown DST is -1, not nil
The convention in a decoded time’s dst flag is that t means DST, nil means standard time, and -1 means unknown. This differs from the convention for other components of a decoded time, where nil means unknown. Fix some places where iso8601-parse mistakenly treated nil as meaning that the dst flag was unknown. * doc/lispref/os.texi (Time Parsing): Adjust to match parse-time-string’s doc string. * lisp/calendar/iso8601.el (iso8601-parse): Set dst flag to nil if a numeric time zone or "Z" is given. (iso8601--decoded-time): Default dst flag to -1 if no dst flag or zone is given. * lisp/calendar/time-date.el (decoded-time-set-defaults): When we don’t have a time zone, set the dst flag consistently with DEFAULT-ZONE. * test/lisp/calendar/iso8601-tests.el (test-iso8601-date-years) (test-iso8601-date-dates, test-iso8601-date-obsolete) (test-iso8601-date-weeks, test-iso8601-date-ordinals) (test-iso8601-time, test-iso8601-combined) (test-iso8601-duration, test-iso8601-intervals) (standard-test-dates, standard-test-time-of-day-local-time) (standard-test-time-of-day-fractions) (nonstandard-test-time-of-day-decimals) (standard-test-time-of-day-beginning-of-day) (standard-test-date-and-time-of-day, standard-test-interval): Adjust tests to match fixed behavior.
Diffstat (limited to 'lisp/calendar/time-date.el')
-rw-r--r--lisp/calendar/time-date.el17
1 files changed, 8 insertions, 9 deletions
diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el
index 1e589ece29d..e2402de8010 100644
--- a/lisp/calendar/time-date.el
+++ b/lisp/calendar/time-date.el
@@ -515,15 +515,14 @@ TIME is modified and returned."
(unless (decoded-time-year time)
(setf (decoded-time-year time) 0))
- ;; When we don't have a time zone and we don't have a DST, then mark
- ;; it as unknown.
- (when (and (not (decoded-time-zone time))
- (not (decoded-time-dst time)))
- (setf (decoded-time-dst time) -1))
-
- (when (and (not (decoded-time-zone time))
- default-zone)
- (setf (decoded-time-zone time) 0))
+ ;; When we don't have a time zone, default to DEFAULT-ZONE without
+ ;; DST if DEFAULT-ZONE if given, and to unknown DST otherwise.
+ (unless (decoded-time-zone time)
+ (if default-zone
+ (progn (setf (decoded-time-zone time) default-zone)
+ (setf (decoded-time-dst time) nil))
+ (setf (decoded-time-dst time) -1)))
+
time)
(provide 'time-date)