aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2020-01-24 13:36:56 -0800
committerPaul Eggert2020-01-24 13:41:56 -0800
commita391ffa2f0377306449b36cc62858db823d2e990 (patch)
tree6b4c1723452ea8ec3ce456278f964626df209275
parent9c576c207a8f4f98fd89deb4f3b4bfbe1ad37e37 (diff)
downloademacs-a391ffa2f0377306449b36cc62858db823d2e990.tar.gz
emacs-a391ffa2f0377306449b36cc62858db823d2e990.zip
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.
-rw-r--r--doc/lispref/os.texi3
-rw-r--r--lisp/calendar/iso8601.el8
-rw-r--r--lisp/calendar/time-date.el17
-rw-r--r--test/lisp/calendar/iso8601-tests.el142
4 files changed, 87 insertions, 83 deletions
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index 201ca18c1e4..a034ccdcd5c 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -1689,7 +1689,8 @@ following form:
1689@noindent 1689@noindent
1690The format of this list is the same as what @code{decode-time} accepts 1690The format of this list is the same as what @code{decode-time} accepts
1691(@pxref{Time Conversion}), and is described in more detail there. Any 1691(@pxref{Time Conversion}), and is described in more detail there. Any
1692element that cannot be determined from the input will be set to 1692@code{dst} element that cannot be determined from the input is set to
1693@minus{}1, and any other unknown element is set to
1693@code{nil}. The argument @var{string} should resemble an RFC 822 (or later) or 1694@code{nil}. The argument @var{string} should resemble an RFC 822 (or later) or
1694ISO 8601 string, like ``Fri, 25 Mar 2016 16:24:56 +0100'' or 1695ISO 8601 string, like ``Fri, 25 Mar 2016 16:24:56 +0100'' or
1695``1998-09-12T12:21:54-0200'', but this function will attempt to parse 1696``1998-09-12T12:21:54-0200'', but this function will attempt to parse
diff --git a/lisp/calendar/iso8601.el b/lisp/calendar/iso8601.el
index ae1dab17252..e42fe0fa21f 100644
--- a/lisp/calendar/iso8601.el
+++ b/lisp/calendar/iso8601.el
@@ -136,7 +136,8 @@ See `decode-time' for the meaning of FORM."
136 (when zone-string 136 (when zone-string
137 (setf (decoded-time-zone date) 137 (setf (decoded-time-zone date)
138 ;; The time zone in decoded times are in seconds. 138 ;; The time zone in decoded times are in seconds.
139 (* (iso8601-parse-zone zone-string) 60))) 139 (* (iso8601-parse-zone zone-string) 60))
140 (setf (decoded-time-dst date) nil))
140 date))) 141 date)))
141 142
142(defun iso8601-parse-date (string) 143(defun iso8601-parse-date (string)
@@ -332,6 +333,9 @@ Return the number of minutes."
332 (list start end 333 (list start end
333 (or duration 334 (or duration
334 ;; FIXME: Support subseconds. 335 ;; FIXME: Support subseconds.
336 ;; FIXME: It makes no sense to decode a time difference
337 ;; according to (decoded-time-zone end), or according to
338 ;; any other time zone for that matter.
335 (decode-time (time-subtract (iso8601--encode-time end) 339 (decode-time (time-subtract (iso8601--encode-time end)
336 (iso8601--encode-time start)) 340 (iso8601--encode-time start))
337 (or (decoded-time-zone end) 0) 'integer))))) 341 (or (decoded-time-zone end) 0) 'integer)))))
@@ -354,7 +358,7 @@ Return the number of minutes."
354 (iso8601--value month) 358 (iso8601--value month)
355 (iso8601--value year) 359 (iso8601--value year)
356 nil 360 nil
357 dst 361 (if (or dst zone) dst -1)
358 zone)) 362 zone))
359 363
360(defun iso8601--encode-time (time) 364(defun iso8601--encode-time (time)
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."
515 (unless (decoded-time-year time) 515 (unless (decoded-time-year time)
516 (setf (decoded-time-year time) 0)) 516 (setf (decoded-time-year time) 0))
517 517
518 ;; When we don't have a time zone and we don't have a DST, then mark 518 ;; When we don't have a time zone, default to DEFAULT-ZONE without
519 ;; it as unknown. 519 ;; DST if DEFAULT-ZONE if given, and to unknown DST otherwise.
520 (when (and (not (decoded-time-zone time)) 520 (unless (decoded-time-zone time)
521 (not (decoded-time-dst time))) 521 (if default-zone
522 (setf (decoded-time-dst time) -1)) 522 (progn (setf (decoded-time-zone time) default-zone)
523 523 (setf (decoded-time-dst time) nil))
524 (when (and (not (decoded-time-zone time)) 524 (setf (decoded-time-dst time) -1)))
525 default-zone) 525
526 (setf (decoded-time-zone time) 0))
527 time) 526 time)
528 527
529(provide 'time-date) 528(provide 'time-date)
diff --git a/test/lisp/calendar/iso8601-tests.el b/test/lisp/calendar/iso8601-tests.el
index 430680c5077..6e7a4724a6b 100644
--- a/test/lisp/calendar/iso8601-tests.el
+++ b/test/lisp/calendar/iso8601-tests.el
@@ -24,49 +24,49 @@
24 24
25(ert-deftest test-iso8601-date-years () 25(ert-deftest test-iso8601-date-years ()
26 (should (equal (iso8601-parse-date "1985") 26 (should (equal (iso8601-parse-date "1985")
27 '(nil nil nil nil nil 1985 nil nil nil))) 27 '(nil nil nil nil nil 1985 nil -1 nil)))
28 (should (equal (iso8601-parse-date "-0003") 28 (should (equal (iso8601-parse-date "-0003")
29 '(nil nil nil nil nil -3 nil nil nil))) 29 '(nil nil nil nil nil -3 nil -1 nil)))
30 (should (equal (iso8601-parse-date "+1985") 30 (should (equal (iso8601-parse-date "+1985")
31 '(nil nil nil nil nil 1985 nil nil nil)))) 31 '(nil nil nil nil nil 1985 nil -1 nil))))
32 32
33(ert-deftest test-iso8601-date-dates () 33(ert-deftest test-iso8601-date-dates ()
34 (should (equal (iso8601-parse-date "1985-03-14") 34 (should (equal (iso8601-parse-date "1985-03-14")
35 '(nil nil nil 14 3 1985 nil nil nil))) 35 '(nil nil nil 14 3 1985 nil -1 nil)))
36 (should (equal (iso8601-parse-date "19850314") 36 (should (equal (iso8601-parse-date "19850314")
37 '(nil nil nil 14 3 1985 nil nil nil))) 37 '(nil nil nil 14 3 1985 nil -1 nil)))
38 (should (equal (iso8601-parse-date "1985-02") 38 (should (equal (iso8601-parse-date "1985-02")
39 '(nil nil nil nil 2 1985 nil nil nil)))) 39 '(nil nil nil nil 2 1985 nil -1 nil))))
40 40
41(ert-deftest test-iso8601-date-obsolete () 41(ert-deftest test-iso8601-date-obsolete ()
42 (should (equal (iso8601-parse-date "--02-01") 42 (should (equal (iso8601-parse-date "--02-01")
43 '(nil nil nil 1 2 nil nil nil nil))) 43 '(nil nil nil 1 2 nil nil -1 nil)))
44 (should (equal (iso8601-parse-date "--0201") 44 (should (equal (iso8601-parse-date "--0201")
45 '(nil nil nil 1 2 nil nil nil nil)))) 45 '(nil nil nil 1 2 nil nil -1 nil))))
46 46
47(ert-deftest test-iso8601-date-weeks () 47(ert-deftest test-iso8601-date-weeks ()
48 (should (equal (iso8601-parse-date "2008W39-6") 48 (should (equal (iso8601-parse-date "2008W39-6")
49 '(nil nil nil 27 9 2008 nil nil nil))) 49 '(nil nil nil 27 9 2008 nil -1 nil)))
50 (should (equal (iso8601-parse-date "2009W01-1") 50 (should (equal (iso8601-parse-date "2009W01-1")
51 '(nil nil nil 29 12 2008 nil nil nil))) 51 '(nil nil nil 29 12 2008 nil -1 nil)))
52 (should (equal (iso8601-parse-date "2009W53-7") 52 (should (equal (iso8601-parse-date "2009W53-7")
53 '(nil nil nil 3 1 2010 nil nil nil)))) 53 '(nil nil nil 3 1 2010 nil -1 nil))))
54 54
55(ert-deftest test-iso8601-date-ordinals () 55(ert-deftest test-iso8601-date-ordinals ()
56 (should (equal (iso8601-parse-date "1981-095") 56 (should (equal (iso8601-parse-date "1981-095")
57 '(nil nil nil 5 4 1981 nil nil nil)))) 57 '(nil nil nil 5 4 1981 nil -1 nil))))
58 58
59(ert-deftest test-iso8601-time () 59(ert-deftest test-iso8601-time ()
60 (should (equal (iso8601-parse-time "13:47:30") 60 (should (equal (iso8601-parse-time "13:47:30")
61 '(30 47 13 nil nil nil nil nil nil))) 61 '(30 47 13 nil nil nil nil -1 nil)))
62 (should (equal (iso8601-parse-time "134730") 62 (should (equal (iso8601-parse-time "134730")
63 '(30 47 13 nil nil nil nil nil nil))) 63 '(30 47 13 nil nil nil nil -1 nil)))
64 (should (equal (iso8601-parse-time "1347") 64 (should (equal (iso8601-parse-time "1347")
65 '(0 47 13 nil nil nil nil nil nil)))) 65 '(0 47 13 nil nil nil nil -1 nil))))
66 66
67(ert-deftest test-iso8601-combined () 67(ert-deftest test-iso8601-combined ()
68 (should (equal (iso8601-parse "2008-03-02T13:47:30") 68 (should (equal (iso8601-parse "2008-03-02T13:47:30")
69 '(30 47 13 2 3 2008 nil nil nil))) 69 '(30 47 13 2 3 2008 nil -1 nil)))
70 (should (equal (iso8601-parse "2008-03-02T13:47:30Z") 70 (should (equal (iso8601-parse "2008-03-02T13:47:30Z")
71 '(30 47 13 2 3 2008 nil nil 0))) 71 '(30 47 13 2 3 2008 nil nil 0)))
72 (should (equal (iso8601-parse "2008-03-02T13:47:30+01:00") 72 (should (equal (iso8601-parse "2008-03-02T13:47:30+01:00")
@@ -76,13 +76,13 @@
76 76
77(ert-deftest test-iso8601-duration () 77(ert-deftest test-iso8601-duration ()
78 (should (equal (iso8601-parse-duration "P3Y6M4DT12H30M5S") 78 (should (equal (iso8601-parse-duration "P3Y6M4DT12H30M5S")
79 '(5 30 12 4 6 3 nil nil nil))) 79 '(5 30 12 4 6 3 nil -1 nil)))
80 (should (equal (iso8601-parse-duration "P1M") 80 (should (equal (iso8601-parse-duration "P1M")
81 '(0 0 0 0 1 0 nil nil nil))) 81 '(0 0 0 0 1 0 nil -1 nil)))
82 (should (equal (iso8601-parse-duration "PT1M") 82 (should (equal (iso8601-parse-duration "PT1M")
83 '(0 1 0 0 0 0 nil nil nil))) 83 '(0 1 0 0 0 0 nil -1 nil)))
84 (should (equal (iso8601-parse-duration "P0003-06-04T12:30:05") 84 (should (equal (iso8601-parse-duration "P0003-06-04T12:30:05")
85 '(5 30 12 4 6 3 nil nil nil)))) 85 '(5 30 12 4 6 3 nil -1 nil))))
86 86
87(ert-deftest test-iso8601-invalid () 87(ert-deftest test-iso8601-invalid ()
88 (should-not (iso8601-valid-p " 2008-03-02T13:47:30-01")) 88 (should-not (iso8601-valid-p " 2008-03-02T13:47:30-01"))
@@ -101,88 +101,88 @@
101 (should (equal (iso8601-parse-interval "2007-03-01T13:00:00Z/P1Y2M10DT2H30M") 101 (should (equal (iso8601-parse-interval "2007-03-01T13:00:00Z/P1Y2M10DT2H30M")
102 '((0 0 13 1 3 2007 nil nil 0) 102 '((0 0 13 1 3 2007 nil nil 0)
103 (0 30 15 11 5 2008 nil nil 0) 103 (0 30 15 11 5 2008 nil nil 0)
104 (0 30 2 10 2 1 nil nil nil)))) 104 (0 30 2 10 2 1 nil -1 nil))))
105 (should (equal (iso8601-parse-interval "P1Y2M10DT2H30M/2008-05-11T15:30:00Z") 105 (should (equal (iso8601-parse-interval "P1Y2M10DT2H30M/2008-05-11T15:30:00Z")
106 '((0 0 13 1 3 2007 nil nil 0) 106 '((0 0 13 1 3 2007 nil nil 0)
107 (0 30 15 11 5 2008 nil nil 0) 107 (0 30 15 11 5 2008 nil nil 0)
108 (0 30 2 10 2 1 nil nil nil))))) 108 (0 30 2 10 2 1 nil -1 nil)))))
109 109
110(ert-deftest standard-test-dates () 110(ert-deftest standard-test-dates ()
111 (should (equal (iso8601-parse-date "19850412") 111 (should (equal (iso8601-parse-date "19850412")
112 '(nil nil nil 12 4 1985 nil nil nil))) 112 '(nil nil nil 12 4 1985 nil -1 nil)))
113 (should (equal (iso8601-parse-date "1985-04-12") 113 (should (equal (iso8601-parse-date "1985-04-12")
114 '(nil nil nil 12 4 1985 nil nil nil))) 114 '(nil nil nil 12 4 1985 nil -1 nil)))
115 115
116 (should (equal (iso8601-parse-date "1985102") 116 (should (equal (iso8601-parse-date "1985102")
117 '(nil nil nil 12 4 1985 nil nil nil))) 117 '(nil nil nil 12 4 1985 nil -1 nil)))
118 (should (equal (iso8601-parse-date "1985-102") 118 (should (equal (iso8601-parse-date "1985-102")
119 '(nil nil nil 12 4 1985 nil nil nil))) 119 '(nil nil nil 12 4 1985 nil -1 nil)))
120 120
121 (should (equal (iso8601-parse-date "1985W155") 121 (should (equal (iso8601-parse-date "1985W155")
122 '(nil nil nil 12 4 1985 nil nil nil))) 122 '(nil nil nil 12 4 1985 nil -1 nil)))
123 (should (equal (iso8601-parse-date "1985-W15-5") 123 (should (equal (iso8601-parse-date "1985-W15-5")
124 '(nil nil nil 12 4 1985 nil nil nil))) 124 '(nil nil nil 12 4 1985 nil -1 nil)))
125 125
126 (should (equal (iso8601-parse-date "1985W15") 126 (should (equal (iso8601-parse-date "1985W15")
127 '(nil nil nil 7 4 1985 nil nil nil))) 127 '(nil nil nil 7 4 1985 nil -1 nil)))
128 (should (equal (iso8601-parse-date "1985-W15") 128 (should (equal (iso8601-parse-date "1985-W15")
129 '(nil nil nil 7 4 1985 nil nil nil))) 129 '(nil nil nil 7 4 1985 nil -1 nil)))
130 130
131 (should (equal (iso8601-parse-date "1985-04") 131 (should (equal (iso8601-parse-date "1985-04")
132 '(nil nil nil nil 4 1985 nil nil nil))) 132 '(nil nil nil nil 4 1985 nil -1 nil)))
133 133
134 (should (equal (iso8601-parse-date "1985") 134 (should (equal (iso8601-parse-date "1985")
135 '(nil nil nil nil nil 1985 nil nil nil))) 135 '(nil nil nil nil nil 1985 nil -1 nil)))
136 136
137 (should (equal (iso8601-parse-date "+1985-04-12") 137 (should (equal (iso8601-parse-date "+1985-04-12")
138 '(nil nil nil 12 4 1985 nil nil nil))) 138 '(nil nil nil 12 4 1985 nil -1 nil)))
139 (should (equal (iso8601-parse-date "+19850412") 139 (should (equal (iso8601-parse-date "+19850412")
140 '(nil nil nil 12 4 1985 nil nil nil)))) 140 '(nil nil nil 12 4 1985 nil -1 nil))))
141 141
142(ert-deftest standard-test-time-of-day-local-time () 142(ert-deftest standard-test-time-of-day-local-time ()
143 (should (equal (iso8601-parse-time "152746") 143 (should (equal (iso8601-parse-time "152746")
144 '(46 27 15 nil nil nil nil nil nil))) 144 '(46 27 15 nil nil nil nil -1 nil)))
145 (should (equal (iso8601-parse-time "15:27:46") 145 (should (equal (iso8601-parse-time "15:27:46")
146 '(46 27 15 nil nil nil nil nil nil))) 146 '(46 27 15 nil nil nil nil -1 nil)))
147 147
148 (should (equal (iso8601-parse-time "1528") 148 (should (equal (iso8601-parse-time "1528")
149 '(0 28 15 nil nil nil nil nil nil))) 149 '(0 28 15 nil nil nil nil -1 nil)))
150 (should (equal (iso8601-parse-time "15:28") 150 (should (equal (iso8601-parse-time "15:28")
151 '(0 28 15 nil nil nil nil nil nil))) 151 '(0 28 15 nil nil nil nil -1 nil)))
152 152
153 (should (equal (iso8601-parse-time "15") 153 (should (equal (iso8601-parse-time "15")
154 '(0 0 15 nil nil nil nil nil nil)))) 154 '(0 0 15 nil nil nil nil -1 nil))))
155 155
156(ert-deftest standard-test-time-of-day-fractions () 156(ert-deftest standard-test-time-of-day-fractions ()
157 (should (equal (iso8601-parse-time "152735,5" t) 157 (should (equal (iso8601-parse-time "152735,5" t)
158 '((355 . 10) 27 15 nil nil nil nil nil nil))) 158 '((355 . 10) 27 15 nil nil nil nil -1 nil)))
159 (should (equal (iso8601-parse-time "15:27:35,5" t) 159 (should (equal (iso8601-parse-time "15:27:35,5" t)
160 '((355 . 10) 27 15 nil nil nil nil nil nil))) 160 '((355 . 10) 27 15 nil nil nil nil -1 nil)))
161 161
162 (should (equal (iso8601-parse-time "2320,5" t) 162 (should (equal (iso8601-parse-time "2320,5" t)
163 '(30 20 23 nil nil nil nil nil nil))) 163 '(30 20 23 nil nil nil nil -1 nil)))
164 (should (equal (iso8601-parse-time "23:20,8" t) 164 (should (equal (iso8601-parse-time "23:20,8" t)
165 '(48 20 23 nil nil nil nil nil nil))) 165 '(48 20 23 nil nil nil nil -1 nil)))
166 166
167 (should (equal (iso8601-parse-time "23,3" t) 167 (should (equal (iso8601-parse-time "23,3" t)
168 '(0 18 23 nil nil nil nil nil nil)))) 168 '(0 18 23 nil nil nil nil -1 nil))))
169 169
170(ert-deftest nonstandard-test-time-of-day-decimals () 170(ert-deftest nonstandard-test-time-of-day-decimals ()
171 (should (equal (iso8601-parse-time "15:27:35.123" t) 171 (should (equal (iso8601-parse-time "15:27:35.123" t)
172 '((35123 . 1000) 27 15 nil nil nil nil nil nil))) 172 '((35123 . 1000) 27 15 nil nil nil nil -1 nil)))
173 (should (equal (iso8601-parse-time "15:27:35.123456789" t) 173 (should (equal (iso8601-parse-time "15:27:35.123456789" t)
174 '((35123456789 . 1000000000) 27 15 nil nil nil nil nil nil)))) 174 '((35123456789 . 1000000000) 27 15 nil nil nil nil -1 nil))))
175 175
176(ert-deftest standard-test-time-of-day-beginning-of-day () 176(ert-deftest standard-test-time-of-day-beginning-of-day ()
177 (should (equal (iso8601-parse-time "000000") 177 (should (equal (iso8601-parse-time "000000")
178 '(0 0 0 nil nil nil nil nil nil))) 178 '(0 0 0 nil nil nil nil -1 nil)))
179 (should (equal (iso8601-parse-time "00:00:00") 179 (should (equal (iso8601-parse-time "00:00:00")
180 '(0 0 0 nil nil nil nil nil nil))) 180 '(0 0 0 nil nil nil nil -1 nil)))
181 181
182 (should (equal (iso8601-parse-time "0000") 182 (should (equal (iso8601-parse-time "0000")
183 '(0 0 0 nil nil nil nil nil nil))) 183 '(0 0 0 nil nil nil nil -1 nil)))
184 (should (equal (iso8601-parse-time "00:00") 184 (should (equal (iso8601-parse-time "00:00")
185 '(0 0 0 nil nil nil nil nil nil)))) 185 '(0 0 0 nil nil nil nil -1 nil))))
186 186
187(ert-deftest standard-test-time-of-day-utc () 187(ert-deftest standard-test-time-of-day-utc ()
188 (should (equal (iso8601-parse-time "232030Z") 188 (should (equal (iso8601-parse-time "232030Z")
@@ -222,9 +222,9 @@
222 222
223(ert-deftest standard-test-date-and-time-of-day () 223(ert-deftest standard-test-date-and-time-of-day ()
224 (should (equal (iso8601-parse "19850412T101530") 224 (should (equal (iso8601-parse "19850412T101530")
225 '(30 15 10 12 4 1985 nil nil nil))) 225 '(30 15 10 12 4 1985 nil -1 nil)))
226 (should (equal (iso8601-parse "1985-04-12T10:15:30") 226 (should (equal (iso8601-parse "1985-04-12T10:15:30")
227 '(30 15 10 12 4 1985 nil nil nil))) 227 '(30 15 10 12 4 1985 nil -1 nil)))
228 228
229 (should (equal (iso8601-parse "1985102T235030Z") 229 (should (equal (iso8601-parse "1985102T235030Z")
230 '(30 50 23 12 4 1985 nil nil 0))) 230 '(30 50 23 12 4 1985 nil nil 0)))
@@ -232,9 +232,9 @@
232 '(30 50 23 12 4 1985 nil nil 0))) 232 '(30 50 23 12 4 1985 nil nil 0)))
233 233
234 (should (equal (iso8601-parse "1985W155T235030") 234 (should (equal (iso8601-parse "1985W155T235030")
235 '(30 50 23 12 4 1985 nil nil nil))) 235 '(30 50 23 12 4 1985 nil -1 nil)))
236 (should (equal (iso8601-parse "1985-W155T23:50:30") 236 (should (equal (iso8601-parse "1985-W155T23:50:30")
237 '(30 50 23 12 4 1985 nil nil nil)))) 237 '(30 50 23 12 4 1985 nil -1 nil))))
238 238
239(ert-deftest standard-test-interval () 239(ert-deftest standard-test-interval ()
240 ;; A time interval starting at 20 minutes and 50 seconds past 23 240 ;; A time interval starting at 20 minutes and 50 seconds past 23
@@ -256,48 +256,48 @@
256 ;; This example doesn't seem valid according to the standard. 256 ;; This example doesn't seem valid according to the standard.
257 ;; "0625" is unambiguous, and means "the year 625". Weird. 257 ;; "0625" is unambiguous, and means "the year 625". Weird.
258 ;; (should (equal (iso8601-parse-interval "19850412/0625") 258 ;; (should (equal (iso8601-parse-interval "19850412/0625")
259 ;; '((nil nil nil 12 4 1985 nil nil nil) 259 ;; '((nil nil nil 12 4 1985 nil -1 nil)
260 ;; (nil nil nil nil nil 625 nil nil nil) 260 ;; (nil nil nil nil nil 625 nil -1 nil)
261 ;; (0 17 0 22 9 609 5 nil 0)))) 261 ;; (0 17 0 22 9 609 5 nil 0))))
262 262
263 ;; A time interval of 2 years, 10 months, 15 days, 10 hours, 20 263 ;; A time interval of 2 years, 10 months, 15 days, 10 hours, 20
264 ;; minutes and 30 seconds. 264 ;; minutes and 30 seconds.
265 (should (equal (iso8601-parse-duration "P2Y10M15DT10H20M30S") 265 (should (equal (iso8601-parse-duration "P2Y10M15DT10H20M30S")
266 '(30 20 10 15 10 2 nil nil nil))) 266 '(30 20 10 15 10 2 nil -1 nil)))
267 267
268 (should (equal (iso8601-parse-duration "P00021015T102030") 268 (should (equal (iso8601-parse-duration "P00021015T102030")
269 '(30 20 10 15 10 2 nil nil nil))) 269 '(30 20 10 15 10 2 nil -1 nil)))
270 (should (equal (iso8601-parse-duration "P0002-10-15T10:20:30") 270 (should (equal (iso8601-parse-duration "P0002-10-15T10:20:30")
271 '(30 20 10 15 10 2 nil nil nil))) 271 '(30 20 10 15 10 2 nil -1 nil)))
272 272
273 ;; A time interval of 1 year and 6 months. 273 ;; A time interval of 1 year and 6 months.
274 (should (equal (iso8601-parse-duration "P1Y6M") 274 (should (equal (iso8601-parse-duration "P1Y6M")
275 '(0 0 0 0 6 1 nil nil nil))) 275 '(0 0 0 0 6 1 nil -1 nil)))
276 (should (equal (iso8601-parse-duration "P0001-06") 276 (should (equal (iso8601-parse-duration "P0001-06")
277 '(nil nil nil nil 6 1 nil nil nil))) 277 '(nil nil nil nil 6 1 nil -1 nil)))
278 278
279 ;; A time interval of seventy-two hours. 279 ;; A time interval of seventy-two hours.
280 (should (equal (iso8601-parse-duration "PT72H") 280 (should (equal (iso8601-parse-duration "PT72H")
281 '(0 0 72 0 0 0 nil nil nil))) 281 '(0 0 72 0 0 0 nil -1 nil)))
282 282
283 ;; Defined by start and duration 283 ;; Defined by start and duration
284 ;; A time interval of 1 year, 2 months, 15 days and 12 hours, 284 ;; A time interval of 1 year, 2 months, 15 days and 12 hours,
285 ;; beginning on 12 April 1985 at 20 minutes past 23 hours. 285 ;; beginning on 12 April 1985 at 20 minutes past 23 hours.
286 (should (equal (iso8601-parse-interval "19850412T232000/P1Y2M15DT12H") 286 (should (equal (iso8601-parse-interval "19850412T232000/P1Y2M15DT12H")
287 '((0 20 23 12 4 1985 nil nil nil) 287 '((0 20 23 12 4 1985 nil -1 nil)
288 (0 20 11 28 6 1986 nil nil nil) 288 (0 20 11 28 6 1986 nil -1 nil)
289 (0 0 12 15 2 1 nil nil nil)))) 289 (0 0 12 15 2 1 nil -1 nil))))
290 (should (equal (iso8601-parse-interval "1985-04-12T23:20:00/P1Y2M15DT12H") 290 (should (equal (iso8601-parse-interval "1985-04-12T23:20:00/P1Y2M15DT12H")
291 '((0 20 23 12 4 1985 nil nil nil) 291 '((0 20 23 12 4 1985 nil -1 nil)
292 (0 20 11 28 6 1986 nil nil nil) 292 (0 20 11 28 6 1986 nil -1 nil)
293 (0 0 12 15 2 1 nil nil nil)))) 293 (0 0 12 15 2 1 nil -1 nil))))
294 294
295 ;; Defined by duration and end 295 ;; Defined by duration and end
296 ;; A time interval of 1 year, 2 months, 15 days and 12 hours, ending 296 ;; A time interval of 1 year, 2 months, 15 days and 12 hours, ending
297 ;; on 12 April 1985 at 20 minutes past 23 hour. 297 ;; on 12 April 1985 at 20 minutes past 23 hour.
298 (should (equal (iso8601-parse-interval "P1Y2M15DT12H/19850412T232000") 298 (should (equal (iso8601-parse-interval "P1Y2M15DT12H/19850412T232000")
299 '((0 20 11 28 1 1984 nil nil nil) 299 '((0 20 11 28 1 1984 nil -1 nil)
300 (0 20 23 12 4 1985 nil nil nil) 300 (0 20 23 12 4 1985 nil -1 nil)
301 (0 0 12 15 2 1 nil nil nil))))) 301 (0 0 12 15 2 1 nil -1 nil)))))
302 302
303;;; iso8601-tests.el ends here 303;;; iso8601-tests.el ends here