1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.time.format;
17
18 import java.util.Locale;
19 import java.util.TimeZone;
20
21 import junit.framework.TestCase;
22 import junit.framework.TestSuite;
23
24 import org.joda.time.DateTime;
25 import org.joda.time.DateTimeZone;
26
27
28
29
30
31
32 public class TestISODateTimeFormatParsing extends TestCase {
33
34 private DateTimeZone originalDateTimeZone = null;
35 private TimeZone originalTimeZone = null;
36 private Locale originalLocale = null;
37
38 public static void main(String[] args) {
39 junit.textui.TestRunner.run(suite());
40 }
41
42 public static TestSuite suite() {
43 return new TestSuite(TestISODateTimeFormatParsing.class);
44 }
45
46 public TestISODateTimeFormatParsing(String name) {
47 super(name);
48 }
49
50 protected void setUp() throws Exception {
51 originalDateTimeZone = DateTimeZone.getDefault();
52 originalTimeZone = TimeZone.getDefault();
53 originalLocale = Locale.getDefault();
54 DateTimeZone.setDefault(DateTimeZone.forID("Europe/London"));
55 TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
56 Locale.setDefault(Locale.UK);
57 }
58
59 protected void tearDown() throws Exception {
60 DateTimeZone.setDefault(originalDateTimeZone);
61 TimeZone.setDefault(originalTimeZone);
62 Locale.setDefault(originalLocale);
63 originalDateTimeZone = null;
64 originalTimeZone = null;
65 originalLocale = null;
66 }
67
68
69 public void test_dateParser() {
70 DateTimeFormatter parser = ISODateTimeFormat.dateParser();
71 assertParse(parser, true, "2006-06-09");
72 assertParse(parser, true, "2006-W27-3");
73 assertParse(parser, true, "2006-123");
74 assertParse(parser, true, "2006-06-09T+02:00");
75 assertParse(parser, true, "2006-W27-3T+02:00");
76 assertParse(parser, true, "2006-123T+02:00");
77
78 assertParse(parser, false, "2006-06-09T10:20:30.040");
79 assertParse(parser, false, "2006-W27-3T10:20:30.040");
80 assertParse(parser, false, "2006-123T10:20:30.040");
81 assertParse(parser, false, "2006-06-09T10:20:30.040+02:00");
82 assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00");
83 assertParse(parser, false, "2006-123T10:20:30.040+02:00");
84
85 assertParse(parser, false, "T10:20:30.040");
86 assertParse(parser, false, "T10.5");
87 assertParse(parser, false, "T10:20:30.040+02:00");
88 assertParse(parser, false, "T10.5+02:00");
89
90 assertParse(parser, false, "10:20:30.040");
91 assertParse(parser, false, "10.5");
92 assertParse(parser, false, "10:20:30.040+02:00");
93 assertParse(parser, false, "10.5+02:00");
94 }
95
96
97 public void test_localDateParser() {
98 DateTimeFormatter parser = ISODateTimeFormat.localDateParser();
99 assertEquals(DateTimeZone.UTC, parser.getZone());
100 assertParse(parser, true, "2006-06-09");
101 assertParse(parser, true, "2006-W27-3");
102 assertParse(parser, true, "2006-123");
103 assertParse(parser, false, "2006-06-09T+02:00");
104 assertParse(parser, false, "2006-W27-3T+02:00");
105 assertParse(parser, false, "2006-123T+02:00");
106
107 assertParse(parser, false, "2006-06-09T10:20:30.040");
108 assertParse(parser, false, "2006-W27-3T10:20:30.040");
109 assertParse(parser, false, "2006-123T10:20:30.040");
110 assertParse(parser, false, "2006-06-09T10:20:30.040+02:00");
111 assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00");
112 assertParse(parser, false, "2006-123T10:20:30.040+02:00");
113
114 assertParse(parser, false, "T10:20:30.040");
115 assertParse(parser, false, "T10.5");
116 assertParse(parser, false, "T10:20:30.040+02:00");
117 assertParse(parser, false, "T10.5+02:00");
118
119 assertParse(parser, false, "10:20:30.040");
120 assertParse(parser, false, "10.5");
121 assertParse(parser, false, "10:20:30.040+02:00");
122 assertParse(parser, false, "10.5+02:00");
123 }
124
125
126 public void test_dateElementParser() {
127 DateTimeFormatter parser = ISODateTimeFormat.dateElementParser();
128 assertParse(parser, "2006-06-09", new DateTime(2006, 6, 9, 0, 0, 0, 0));
129 assertParse(parser, "2006-06-9", new DateTime(2006, 6, 9, 0, 0, 0, 0));
130 assertParse(parser, "2006-6-09", new DateTime(2006, 6, 9, 0, 0, 0, 0));
131 assertParse(parser, "2006-6-9", new DateTime(2006, 6, 9, 0, 0, 0, 0));
132 assertParse(parser, true, "2006-W27-3");
133 assertParse(parser, true, "2006-123");
134 assertParse(parser, false, "2006-06-09T+02:00");
135 assertParse(parser, false, "2006-W27-3T+02:00");
136 assertParse(parser, false, "2006-123T+02:00");
137
138 assertParse(parser, false, "2006-06-09T10:20:30.040");
139 assertParse(parser, false, "2006-W27-3T10:20:30.040");
140 assertParse(parser, false, "2006-123T10:20:30.040");
141 assertParse(parser, false, "2006-06-09T10:20:30.040+02:00");
142 assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00");
143 assertParse(parser, false, "2006-123T10:20:30.040+02:00");
144
145 assertParse(parser, false, "T10:20:30.040");
146 assertParse(parser, false, "T10.5");
147 assertParse(parser, false, "T10:20:30.040+02:00");
148 assertParse(parser, false, "T10.5+02:00");
149
150 assertParse(parser, false, "10:20:30.040");
151 assertParse(parser, false, "10.5");
152 assertParse(parser, false, "10:20:30.040+02:00");
153 assertParse(parser, false, "10.5+02:00");
154 }
155
156
157 public void test_timeParser() {
158 DateTimeZone.setDefault(DateTimeZone.UTC);
159 DateTimeFormatter parser = ISODateTimeFormat.timeParser();
160 assertParse(parser, false, "2006-06-09");
161 assertParse(parser, false, "2006-W27-3");
162 assertParse(parser, false, "2006-123");
163 assertParse(parser, false, "2006-06-09T+02:00");
164 assertParse(parser, false, "2006-W27-3T+02:00");
165 assertParse(parser, false, "2006-123T+02:00");
166
167 assertParse(parser, false, "2006-06-09T10:20:30.040");
168 assertParse(parser, false, "2006-W27-3T10:20:30.040");
169 assertParse(parser, false, "2006-123T10:20:30.040");
170 assertParse(parser, false, "2006-06-09T10:20:30.040+02:00");
171 assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00");
172 assertParse(parser, false, "2006-123T10:20:30.040+02:00");
173
174 assertParse(parser, "T10:20:30.040000000", new DateTime(1970, 1, 1, 10, 20, 30, 40));
175 assertParse(parser, "T10:20:30.004", new DateTime(1970, 1, 1, 10, 20, 30, 4));
176 assertParse(parser, "T10:20:30.040", new DateTime(1970, 1, 1, 10, 20, 30, 40));
177 assertParse(parser, "T10:20:30.400", new DateTime(1970, 1, 1, 10, 20, 30, 400));
178 assertParse(parser, "T10.5", new DateTime(1970, 1, 1, 10, 30, 0, 0));
179 assertParse(parser, "T10:20:30.040+02:00", new DateTime(1970, 1, 1, 8, 20, 30, 40));
180 assertParse(parser, "T10.5+02:00", new DateTime(1970, 1, 1, 8, 30, 0, 0));
181
182 assertParse(parser, true, "10:20:30.040");
183 assertParse(parser, true, "10.5");
184 assertParse(parser, true, "10:20:30.040+02:00");
185 assertParse(parser, true, "10.5+02:00");
186 }
187
188
189 public void test_localTimeParser() {
190 DateTimeFormatter parser = ISODateTimeFormat.localTimeParser();
191 assertEquals(DateTimeZone.UTC, parser.getZone());
192 assertParse(parser, false, "2006-06-09");
193 assertParse(parser, false, "2006-W27-3");
194 assertParse(parser, false, "2006-123");
195 assertParse(parser, false, "2006-06-09T+02:00");
196 assertParse(parser, false, "2006-W27-3T+02:00");
197 assertParse(parser, false, "2006-123T+02:00");
198
199 assertParse(parser, false, "2006-06-09T10:20:30.040");
200 assertParse(parser, false, "2006-W27-3T10:20:30.040");
201 assertParse(parser, false, "2006-123T10:20:30.040");
202 assertParse(parser, false, "2006-06-09T10:20:30.040+02:00");
203 assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00");
204 assertParse(parser, false, "2006-123T10:20:30.040+02:00");
205
206 assertParse(parser, true, "T10:20:30.040");
207 assertParse(parser, true, "T10.5");
208 assertParse(parser, false, "T10:20:30.040+02:00");
209 assertParse(parser, false, "T10.5+02:00");
210
211 assertParse(parser, true, "10:20:30.040");
212 assertParse(parser, true, "10.5");
213 assertParse(parser, false, "10:20:30.040+02:00");
214 assertParse(parser, false, "10.5+02:00");
215
216 assertParse(parser, true, "00:00:10.512345678");
217 assertEquals(10512, parser.parseMillis("00:00:10.512345678"));
218 }
219
220
221 public void test_timeElementParser() {
222 DateTimeFormatter parser = ISODateTimeFormat.timeElementParser();
223 assertParse(parser, false, "2006-06-09");
224 assertParse(parser, false, "2006-W27-3");
225 assertParse(parser, false, "2006-123");
226 assertParse(parser, false, "2006-06-09T+02:00");
227 assertParse(parser, false, "2006-W27-3T+02:00");
228 assertParse(parser, false, "2006-123T+02:00");
229
230 assertParse(parser, false, "2006-06-09T10:20:30.040");
231 assertParse(parser, false, "2006-W27-3T10:20:30.040");
232 assertParse(parser, false, "2006-123T10:20:30.040");
233 assertParse(parser, false, "2006-06-09T10:20:30.040+02:00");
234 assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00");
235 assertParse(parser, false, "2006-123T10:20:30.040+02:00");
236
237 assertParse(parser, false, "T10:20:30.040");
238 assertParse(parser, false, "T10.5");
239 assertParse(parser, false, "T10:20:30.040+02:00");
240 assertParse(parser, false, "T10.5+02:00");
241
242 assertParse(parser, true, "10:20:30.040");
243 assertParse(parser, true, "10.5");
244 assertParse(parser, false, "10:20:30.040+02:00");
245 assertParse(parser, false, "10.5+02:00");
246
247 assertParse(parser, true, "00:00:10.512345678");
248
249 assertEquals(10512, parser.parseMillis("00:00:10.512345678") + DateTimeZone.getDefault().getOffset(0L));
250 }
251
252
253 public void test_dateTimeParser() {
254 DateTimeFormatter parser = ISODateTimeFormat.dateTimeParser();
255 assertParse(parser, true, "2006-06-09");
256 assertParse(parser, true, "2006-W27-3");
257 assertParse(parser, true, "2006-123");
258 assertParse(parser, true, "2006-06-09T+02:00");
259 assertParse(parser, true, "2006-W27-3T+02:00");
260 assertParse(parser, true, "2006-123T+02:00");
261
262 assertParse(parser, true, "2006-06-09T10:20:30.040");
263 assertParse(parser, true, "2006-W27-3T10:20:30.040");
264 assertParse(parser, true, "2006-123T10:20:30.040");
265 assertParse(parser, true, "2006-06-09T10:20:30.040+02:00");
266 assertParse(parser, true, "2006-W27-3T10:20:30.040+02:00");
267 assertParse(parser, true, "2006-123T10:20:30.040+02:00");
268
269 assertParse(parser, true, "T10:20:30.040");
270 assertParse(parser, true, "T10.5");
271 assertParse(parser, true, "T10:20:30.040+02:00");
272 assertParse(parser, true, "T10.5+02:00");
273
274 assertParse(parser, false, "10:20:30.040");
275 assertParse(parser, false, "10.5");
276 assertParse(parser, false, "10:20:30.040+02:00");
277 assertParse(parser, false, "10.5+02:00");
278 }
279
280
281 public void test_dateOptionalTimeParser() {
282 DateTimeFormatter parser = ISODateTimeFormat.dateOptionalTimeParser();
283 assertParse(parser, true, "2006-06-09");
284 assertParse(parser, true, "2006-W27-3");
285 assertParse(parser, true, "2006-123");
286 assertParse(parser, true, "2006-06-09T+02:00");
287 assertParse(parser, true, "2006-W27-3T+02:00");
288 assertParse(parser, true, "2006-123T+02:00");
289
290 assertParse(parser, true, "2006-06-09T10:20:30.040");
291 assertParse(parser, true, "2006-W27-3T10:20:30.040");
292 assertParse(parser, true, "2006-123T10:20:30.040");
293 assertParse(parser, true, "2006-06-09T10:20:30.040+02:00");
294 assertParse(parser, true, "2006-W27-3T10:20:30.040+02:00");
295 assertParse(parser, true, "2006-123T10:20:30.040+02:00");
296
297 assertParse(parser, false, "T10:20:30.040");
298 assertParse(parser, false, "T10.5");
299 assertParse(parser, false, "T10:20:30.040+02:00");
300 assertParse(parser, false, "T10.5+02:00");
301
302 assertParse(parser, false, "10:20:30.040");
303 assertParse(parser, false, "10.5");
304 assertParse(parser, false, "10:20:30.040+02:00");
305 assertParse(parser, false, "10.5+02:00");
306 }
307
308
309 public void test_localDateOptionalTimeParser() {
310 DateTimeFormatter parser = ISODateTimeFormat.localDateOptionalTimeParser();
311 assertEquals(DateTimeZone.UTC, parser.getZone());
312 assertParse(parser, true, "2006-06-09");
313 assertParse(parser, true, "2006-W27-3");
314 assertParse(parser, true, "2006-123");
315 assertParse(parser, false, "2006-06-09T+02:00");
316 assertParse(parser, false, "2006-W27-3T+02:00");
317 assertParse(parser, false, "2006-123T+02:00");
318
319 assertParse(parser, true, "2006-06-09T10:20:30.040");
320 assertParse(parser, true, "2006-W27-3T10:20:30.040");
321 assertParse(parser, true, "2006-123T10:20:30.040");
322 assertParse(parser, false, "2006-06-09T10:20:30.040+02:00");
323 assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00");
324 assertParse(parser, false, "2006-123T10:20:30.040+02:00");
325
326 assertParse(parser, false, "T10:20:30.040");
327 assertParse(parser, false, "T10.5");
328 assertParse(parser, false, "T10:20:30.040+02:00");
329 assertParse(parser, false, "T10.5+02:00");
330
331 assertParse(parser, false, "10:20:30.040");
332 assertParse(parser, false, "10.5");
333 assertParse(parser, false, "10:20:30.040+02:00");
334 assertParse(parser, false, "10.5+02:00");
335 }
336
337
338
339
340 public void test_date() {
341 DateTimeFormatter parser = ISODateTimeFormat.date();
342 assertParse(parser, "2006-02-04", new DateTime(2006, 2, 4, 0, 0, 0, 0));
343 assertParse(parser, "2006-2-04", new DateTime(2006, 2, 4, 0, 0, 0, 0));
344 assertParse(parser, "2006-02-4", new DateTime(2006, 2, 4, 0, 0, 0, 0));
345 assertParse(parser, "2006-2-4", new DateTime(2006, 2, 4, 0, 0, 0, 0));
346 assertParse(parser, false, "2006-02-");
347 assertParse(parser, false, "2006-02");
348 assertParse(parser, false, "2006--4");
349 assertParse(parser, false, "2006-1");
350 assertParse(parser, false, "2006");
351 }
352
353
354 public void test_time() {
355 DateTimeZone.setDefault(DateTimeZone.UTC);
356 DateTimeFormatter parser = ISODateTimeFormat.time();
357 assertParse(parser, "10:20:30.400999999Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
358 assertParse(parser, "10:20:30.400Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
359 assertParse(parser, "10:20:30.40Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
360 assertParse(parser, "10:20:30.4Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
361 assertParse(parser, "5:6:7.8Z", new DateTime(1970, 1, 1, 5, 6, 7, 800));
362 assertParse(parser, false, "10:20.400Z");
363 assertParse(parser, false, "10:2.400Z");
364 assertParse(parser, false, "10.400Z");
365 assertParse(parser, false, "1.400Z");
366 }
367
368
369 public void test_timeNoMillis() {
370 DateTimeZone.setDefault(DateTimeZone.UTC);
371 DateTimeFormatter parser = ISODateTimeFormat.timeNoMillis();
372 assertParse(parser, "10:20:30Z", new DateTime(1970, 1, 1, 10, 20, 30, 0));
373 assertParse(parser, "5:6:7Z", new DateTime(1970, 1, 1, 5, 6, 7, 0));
374 assertParse(parser, false, "10:20Z");
375 assertParse(parser, false, "10:2Z");
376 assertParse(parser, false, "10Z");
377 assertParse(parser, false, "1Z");
378 }
379
380
381 public void test_tTime() {
382 DateTimeZone.setDefault(DateTimeZone.UTC);
383 DateTimeFormatter parser = ISODateTimeFormat.tTime();
384 assertParse(parser, "T10:20:30.400999999Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
385 assertParse(parser, "T10:20:30.400Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
386 assertParse(parser, "T10:20:30.40Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
387 assertParse(parser, "T10:20:30.4Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
388 assertParse(parser, "T5:6:7.8Z", new DateTime(1970, 1, 1, 5, 6, 7, 800));
389 assertParse(parser, false, "T10:20.400Z");
390 assertParse(parser, false, "T102.400Z");
391 assertParse(parser, false, "T10.400Z");
392 assertParse(parser, false, "T1.400Z");
393 }
394
395
396 public void test_tTimeNoMillis() {
397 DateTimeZone.setDefault(DateTimeZone.UTC);
398 DateTimeFormatter parser = ISODateTimeFormat.tTimeNoMillis();
399 assertParse(parser, "T10:20:30Z", new DateTime(1970, 1, 1, 10, 20, 30, 0));
400 assertParse(parser, "T5:6:7Z", new DateTime(1970, 1, 1, 5, 6, 7, 0));
401 assertParse(parser, false, "T10:20Z");
402 assertParse(parser, false, "T10:2Z");
403 assertParse(parser, false, "T10Z");
404 assertParse(parser, false, "T1Z");
405 }
406
407
408 public void test_dateTime() {
409 DateTimeZone.setDefault(DateTimeZone.UTC);
410 DateTimeFormatter parser = ISODateTimeFormat.dateTime();
411 assertParse(parser, "2006-02-04T10:20:30.400999999Z", new DateTime(2006, 2, 4, 10, 20, 30, 400));
412 assertParse(parser, "2006-02-04T10:20:30.400Z", new DateTime(2006, 2, 4, 10, 20, 30, 400));
413 assertParse(parser, "2006-02-04T10:20:30.40Z", new DateTime(2006, 2, 4, 10, 20, 30, 400));
414 assertParse(parser, "2006-02-04T10:20:30.4Z", new DateTime(2006, 2, 4, 10, 20, 30, 400));
415 assertParse(parser, "2006-02-4T10:20:30.400Z", new DateTime(2006, 2, 4, 10, 20, 30, 400));
416 assertParse(parser, "2006-2-04T10:20:30.400Z", new DateTime(2006, 2, 4, 10, 20, 30, 400));
417 assertParse(parser, "2006-2-4T10:20:30.400Z", new DateTime(2006, 2, 4, 10, 20, 30, 400));
418 assertParse(parser, "2006-02-04T5:6:7.800Z", new DateTime(2006, 2, 4, 5, 6, 7, 800));
419 assertParse(parser, false, "2006-02-T10:20:30.400Z");
420 assertParse(parser, false, "2006-12T10:20:30.400Z");
421 assertParse(parser, false, "2006-1T10:20:30.400Z");
422 assertParse(parser, false, "2006T10:20:30.400Z");
423 assertParse(parser, false, "200T10:20:30.400Z");
424 assertParse(parser, false, "20T10:20:30.400Z");
425 assertParse(parser, false, "2T10:20:30.400Z");
426 assertParse(parser, false, "2006-02-04T10:20.400Z");
427 assertParse(parser, false, "2006-02-04T10:2.400Z");
428 assertParse(parser, false, "2006-02-04T10.400Z");
429 assertParse(parser, false, "2006-02-04T1.400Z");
430 }
431
432
433 public void test_dateTimeNoMillis() {
434 DateTimeZone.setDefault(DateTimeZone.UTC);
435 DateTimeFormatter parser = ISODateTimeFormat.dateTimeNoMillis();
436 assertParse(parser, "2006-02-04T10:20:30Z", new DateTime(2006, 2, 4, 10, 20, 30, 0));
437 assertParse(parser, "2006-02-4T10:20:30Z", new DateTime(2006, 2, 4, 10, 20, 30, 0));
438 assertParse(parser, "2006-2-04T10:20:30Z", new DateTime(2006, 2, 4, 10, 20, 30, 0));
439 assertParse(parser, "2006-2-4T10:20:30Z", new DateTime(2006, 2, 4, 10, 20, 30, 0));
440 assertParse(parser, "2006-02-04T5:6:7Z", new DateTime(2006, 2, 4, 5, 6, 7, 0));
441 assertParse(parser, false, "2006-02-T10:20:30Z");
442 assertParse(parser, false, "2006-12T10:20:30Z");
443 assertParse(parser, false, "2006-1T10:20:30Z");
444 assertParse(parser, false, "2006T10:20:30Z");
445 assertParse(parser, false, "200T10:20:30Z");
446 assertParse(parser, false, "20T10:20:30Z");
447 assertParse(parser, false, "2T10:20:30Z");
448 assertParse(parser, false, "2006-02-04T10:20Z");
449 assertParse(parser, false, "2006-02-04T10:2Z");
450 assertParse(parser, false, "2006-02-04T10Z");
451 assertParse(parser, false, "2006-02-04T1Z");
452 }
453
454
455 public void test_ordinalDate() {
456 DateTimeFormatter parser = ISODateTimeFormat.ordinalDate();
457 assertParse(parser, "2006-123", new DateTime(2006, 1, 1, 0, 0, 0, 0).withDayOfYear(123));
458 assertParse(parser, "2006-12", new DateTime(2006, 1, 1, 0, 0, 0, 0).withDayOfYear(12));
459 assertParse(parser, "2006-1", new DateTime(2006, 1, 1, 0, 0, 0, 0).withDayOfYear(1));
460 assertParse(parser, false, "2006-");
461 assertParse(parser, false, "2006");
462 }
463
464
465 public void test_ordinalDateTime() {
466 DateTimeZone.setDefault(DateTimeZone.UTC);
467 DateTimeFormatter parser = ISODateTimeFormat.ordinalDateTime();
468 assertParse(parser, "2006-123T10:20:30.400999999Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123));
469 assertParse(parser, "2006-123T10:20:30.400Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123));
470 assertParse(parser, "2006-123T10:20:30.40Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123));
471 assertParse(parser, "2006-123T10:20:30.4Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123));
472 assertParse(parser, "2006-12T10:20:30.400Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(12));
473 assertParse(parser, "2006-1T10:20:30.400Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(1));
474 assertParse(parser, "2006-123T5:6:7.800Z", new DateTime(2006, 1, 1, 5, 6, 7, 800).withDayOfYear(123));
475 assertParse(parser, false, "2006-T10:20:30.400Z");
476 assertParse(parser, false, "2006T10:20:30.400Z");
477 assertParse(parser, false, "2006-123T10:20.400Z");
478 assertParse(parser, false, "2006-123T10:2.400Z");
479 assertParse(parser, false, "2006-123T10.400Z");
480 assertParse(parser, false, "2006-123T1.400Z");
481 }
482
483
484 public void test_ordinalDateTimeNoMillis() {
485 DateTimeZone.setDefault(DateTimeZone.UTC);
486 DateTimeFormatter parser = ISODateTimeFormat.ordinalDateTimeNoMillis();
487 assertParse(parser, "2006-123T10:20:30Z", new DateTime(2006, 1, 1, 10, 20, 30, 0).withDayOfYear(123));
488 assertParse(parser, "2006-12T10:20:30Z", new DateTime(2006, 1, 1, 10, 20, 30, 0).withDayOfYear(12));
489 assertParse(parser, "2006-1T10:20:30Z", new DateTime(2006, 1, 1, 10, 20, 30, 0).withDayOfYear(1));
490 assertParse(parser, "2006-123T5:6:7Z", new DateTime(2006, 1, 1, 5, 6, 7, 0).withDayOfYear(123));
491 assertParse(parser, false, "2006-T10:20:30Z");
492 assertParse(parser, false, "2006T10:20:30Z");
493 assertParse(parser, false, "2006-123T10:20Z");
494 assertParse(parser, false, "2006-123T10:2Z");
495 assertParse(parser, false, "2006-123T10Z");
496 assertParse(parser, false, "2006-123T1Z");
497 }
498
499
500 public void test_weekDate() {
501 DateTimeFormatter parser = ISODateTimeFormat.weekDate();
502 assertParse(parser, "2006-W27-3", new DateTime(2006, 6, 1, 0, 0, 0, 0).withWeekOfWeekyear(27).withDayOfWeek(3));
503 assertParse(parser, "2006-W2-3", new DateTime(2006, 6, 1, 0, 0, 0, 0).withWeekOfWeekyear(2).withDayOfWeek(3));
504 assertParse(parser, false, "2006-W-3");
505 assertParse(parser, false, "2006-W27-");
506 assertParse(parser, false, "2006-W27");
507 assertParse(parser, false, "2006-W2");
508 assertParse(parser, false, "2006-W");
509 }
510
511
512 public void test_weekDateTime() {
513 DateTimeZone.setDefault(DateTimeZone.UTC);
514 DateTimeFormatter parser = ISODateTimeFormat.weekDateTime();
515 assertParse(parser, "2006-W27-3T10:20:30.400999999Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3));
516 assertParse(parser, "2006-W27-3T10:20:30.400Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3));
517 assertParse(parser, "2006-W27-3T10:20:30.40Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3));
518 assertParse(parser, "2006-W27-3T10:20:30.4Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3));
519 assertParse(parser, "2006-W2-3T10:20:30.400Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(2).withDayOfWeek(3));
520 assertParse(parser, "2006-W27-3T5:6:7.800Z", new DateTime(2006, 6, 1, 5, 6, 7, 800).withWeekOfWeekyear(27).withDayOfWeek(3));
521 assertParse(parser, false, "2006-W27-T10:20:30.400Z");
522 assertParse(parser, false, "2006-W27T10:20:30.400Z");
523 assertParse(parser, false, "2006-W2T10:20:30.400Z");
524 assertParse(parser, false, "2006-W-3T10:20:30.400Z");
525 assertParse(parser, false, "2006-W27-3T10:20.400Z");
526 assertParse(parser, false, "2006-W27-3T10:2.400Z");
527 assertParse(parser, false, "2006-W27-3T10.400Z");
528 assertParse(parser, false, "2006-W27-3T1.400Z");
529 }
530
531
532 public void test_weekDateTimeNoMillis() {
533 DateTimeZone.setDefault(DateTimeZone.UTC);
534 DateTimeFormatter parser = ISODateTimeFormat.weekDateTimeNoMillis();
535 assertParse(parser, "2006-W27-3T10:20:30Z", new DateTime(2006, 6, 1, 10, 20, 30, 0).withWeekOfWeekyear(27).withDayOfWeek(3));
536 assertParse(parser, "2006-W2-3T10:20:30Z", new DateTime(2006, 6, 1, 10, 20, 30, 0).withWeekOfWeekyear(2).withDayOfWeek(3));
537 assertParse(parser, "2006-W27-3T5:6:7Z", new DateTime(2006, 6, 1, 5, 6, 7, 0).withWeekOfWeekyear(27).withDayOfWeek(3));
538 assertParse(parser, false, "2006-W27-T10:20:30Z");
539 assertParse(parser, false, "2006-W27T10:20:30Z");
540 assertParse(parser, false, "2006-W2T10:20:30Z");
541 assertParse(parser, false, "2006-W-3T10:20:30Z");
542 assertParse(parser, false, "2006-W27-3T10:20Z");
543 assertParse(parser, false, "2006-W27-3T10:2Z");
544 assertParse(parser, false, "2006-W27-3T10Z");
545 assertParse(parser, false, "2006-W27-3T1Z");
546 }
547
548
549
550
551 public void test_basicDate() {
552 DateTimeFormatter parser = ISODateTimeFormat.basicDate();
553 assertParse(parser, "20060204", new DateTime(2006, 2, 4, 0, 0, 0, 0));
554 assertParse(parser, false, "2006024");
555 assertParse(parser, false, "200602");
556 assertParse(parser, false, "20061");
557 assertParse(parser, false, "2006");
558 }
559
560
561 public void test_basicTime() {
562 DateTimeZone.setDefault(DateTimeZone.UTC);
563 DateTimeFormatter parser = ISODateTimeFormat.basicTime();
564 assertParse(parser, "102030.400999999Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
565 assertParse(parser, "102030.400Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
566 assertParse(parser, "102030.40Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
567 assertParse(parser, "102030.4Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
568 assertParse(parser, false, "10203.400Z");
569 assertParse(parser, false, "1020.400Z");
570 assertParse(parser, false, "102.400Z");
571 assertParse(parser, false, "10.400Z");
572 assertParse(parser, false, "1.400Z");
573 }
574
575
576 public void test_basicTimeNoMillis() {
577 DateTimeZone.setDefault(DateTimeZone.UTC);
578 DateTimeFormatter parser = ISODateTimeFormat.basicTimeNoMillis();
579 assertParse(parser, "102030Z", new DateTime(1970, 1, 1, 10, 20, 30, 0));
580 assertParse(parser, false, "10203Z");
581 assertParse(parser, false, "1020Z");
582 assertParse(parser, false, "102Z");
583 assertParse(parser, false, "10Z");
584 assertParse(parser, false, "1Z");
585 }
586
587
588 public void test_basicTTime() {
589 DateTimeZone.setDefault(DateTimeZone.UTC);
590 DateTimeFormatter parser = ISODateTimeFormat.basicTTime();
591 assertParse(parser, "T102030.400999999Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
592 assertParse(parser, "T102030.400Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
593 assertParse(parser, "T102030.40Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
594 assertParse(parser, "T102030.4Z", new DateTime(1970, 1, 1, 10, 20, 30, 400));
595 assertParse(parser, false, "T10203.400Z");
596 assertParse(parser, false, "T1020.400Z");
597 assertParse(parser, false, "T102.400Z");
598 assertParse(parser, false, "T10.400Z");
599 assertParse(parser, false, "T1.400Z");
600 }
601
602
603 public void test_basicTTimeNoMillis() {
604 DateTimeZone.setDefault(DateTimeZone.UTC);
605 DateTimeFormatter parser = ISODateTimeFormat.basicTTimeNoMillis();
606 assertParse(parser, "T102030Z", new DateTime(1970, 1, 1, 10, 20, 30, 0));
607 assertParse(parser, false, "T10203Z");
608 assertParse(parser, false, "T1020Z");
609 assertParse(parser, false, "T102Z");
610 assertParse(parser, false, "T10Z");
611 assertParse(parser, false, "T1Z");
612 }
613
614
615 public void test_basicDateTime() {
616 DateTimeZone.setDefault(DateTimeZone.UTC);
617 DateTimeFormatter parser = ISODateTimeFormat.basicDateTime();
618 assertParse(parser, "20061204T102030.400999999Z", new DateTime(2006, 12, 4, 10, 20, 30, 400));
619 assertParse(parser, "20061204T102030.400Z", new DateTime(2006, 12, 4, 10, 20, 30, 400));
620 assertParse(parser, "20061204T102030.40Z", new DateTime(2006, 12, 4, 10, 20, 30, 400));
621 assertParse(parser, "20061204T102030.4Z", new DateTime(2006, 12, 4, 10, 20, 30, 400));
622 assertParse(parser, false, "2006120T102030.400Z");
623 assertParse(parser, false, "200612T102030.400Z");
624 assertParse(parser, false, "20061T102030.400Z");
625 assertParse(parser, false, "2006T102030.400Z");
626 assertParse(parser, false, "200T102030.400Z");
627 assertParse(parser, false, "20T102030.400Z");
628 assertParse(parser, false, "2T102030.400Z");
629 assertParse(parser, false, "20061204T10203.400Z");
630 assertParse(parser, false, "20061204T1020.400Z");
631 assertParse(parser, false, "20061204T102.400Z");
632 assertParse(parser, false, "20061204T10.400Z");
633 assertParse(parser, false, "20061204T1.400Z");
634 }
635
636
637 public void test_basicDateTimeNoMillis() {
638 DateTimeZone.setDefault(DateTimeZone.UTC);
639 DateTimeFormatter parser = ISODateTimeFormat.basicDateTimeNoMillis();
640 assertParse(parser, "20061204T102030Z", new DateTime(2006, 12, 4, 10, 20, 30, 0));
641 assertParse(parser, false, "2006120T102030Z");
642 assertParse(parser, false, "200612T102030Z");
643 assertParse(parser, false, "20061T102030Z");
644 assertParse(parser, false, "2006T102030Z");
645 assertParse(parser, false, "200T102030Z");
646 assertParse(parser, false, "20T102030Z");
647 assertParse(parser, false, "2T102030Z");
648 assertParse(parser, false, "20061204T10203Z");
649 assertParse(parser, false, "20061204T1020Z");
650 assertParse(parser, false, "20061204T102Z");
651 assertParse(parser, false, "20061204T10Z");
652 assertParse(parser, false, "20061204T1Z");
653 }
654
655
656 public void test_basicOrdinalDate() {
657 DateTimeFormatter parser = ISODateTimeFormat.basicOrdinalDate();
658 assertParse(parser, "2006123", new DateTime(2006, 1, 1, 0, 0, 0, 0).withDayOfYear(123));
659 assertParse(parser, false, "200612");
660 assertParse(parser, false, "20061");
661 assertParse(parser, false, "2006");
662 }
663
664
665 public void test_basicOrdinalDateTime() {
666 DateTimeZone.setDefault(DateTimeZone.UTC);
667 DateTimeFormatter parser = ISODateTimeFormat.basicOrdinalDateTime();
668 assertParse(parser, "2006123T102030.400999999Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123));
669 assertParse(parser, "2006123T102030.400Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123));
670 assertParse(parser, "2006123T102030.40Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123));
671 assertParse(parser, "2006123T102030.4Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123));
672 assertParse(parser, false, "200612T102030.400Z");
673 assertParse(parser, false, "20061T102030.400Z");
674 assertParse(parser, false, "2006T102030.400Z");
675 assertParse(parser, false, "200T102030.400Z");
676 assertParse(parser, false, "20T102030.400Z");
677 assertParse(parser, false, "2T102030.400Z");
678 assertParse(parser, false, "2006123T10203.400Z");
679 assertParse(parser, false, "2006123T1020.400Z");
680 assertParse(parser, false, "2006123T102.400Z");
681 assertParse(parser, false, "2006123T10.400Z");
682 assertParse(parser, false, "2006123T1.400Z");
683 }
684
685
686 public void test_basicOrdinalDateTimeNoMillis() {
687 DateTimeZone.setDefault(DateTimeZone.UTC);
688 DateTimeFormatter parser = ISODateTimeFormat.basicOrdinalDateTimeNoMillis();
689 assertParse(parser, "2006123T102030Z", new DateTime(2006, 1, 1, 10, 20, 30, 0).withDayOfYear(123));
690 assertParse(parser, false, "200612T102030Z");
691 assertParse(parser, false, "20061T102030Z");
692 assertParse(parser, false, "2006T102030Z");
693 assertParse(parser, false, "200T102030Z");
694 assertParse(parser, false, "20T102030Z");
695 assertParse(parser, false, "2T102030Z");
696 assertParse(parser, false, "2006123T10203Z");
697 assertParse(parser, false, "2006123T1020Z");
698 assertParse(parser, false, "2006123T102Z");
699 assertParse(parser, false, "2006123T10Z");
700 assertParse(parser, false, "2006123T1Z");
701 }
702
703
704 public void test_basicWeekDate() {
705 DateTimeFormatter parser = ISODateTimeFormat.basicWeekDate();
706 assertParse(parser, "2006W273", new DateTime(2006, 6, 1, 0, 0, 0, 0).withWeekOfWeekyear(27).withDayOfWeek(3));
707 assertParse(parser, false, "2006W27");
708 assertParse(parser, false, "2006W2");
709 assertParse(parser, false, "2006W");
710 }
711
712
713 public void test_basicWeekDateTime() {
714 DateTimeZone.setDefault(DateTimeZone.UTC);
715 DateTimeFormatter parser = ISODateTimeFormat.basicWeekDateTime();
716 assertParse(parser, "2006W273T102030.400999999Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3));
717 assertParse(parser, "2006W273T102030.400Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3));
718 assertParse(parser, "2006W273T102030.40Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3));
719 assertParse(parser, "2006W273T102030.4Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3));
720 assertParse(parser, false, "2006W27T102030.400Z");
721 assertParse(parser, false, "2006W2T102030.400Z");
722 assertParse(parser, false, "2006W273T10203.400Z");
723 assertParse(parser, false, "2006W273T1020.400Z");
724 assertParse(parser, false, "2006W273T102.400Z");
725 assertParse(parser, false, "2006W273T10.400Z");
726 assertParse(parser, false, "2006W273T1.400Z");
727 }
728
729
730 public void test_basicWeekDateTimeNoMillis() {
731 DateTimeZone.setDefault(DateTimeZone.UTC);
732 DateTimeFormatter parser = ISODateTimeFormat.basicWeekDateTimeNoMillis();
733 assertParse(parser, "2006W273T102030Z", new DateTime(2006, 6, 1, 10, 20, 30, 0).withWeekOfWeekyear(27).withDayOfWeek(3));
734 assertParse(parser, false, "2006W27T102030Z");
735 assertParse(parser, false, "2006W2T102030Z");
736 assertParse(parser, false, "2006W273T10203Z");
737 assertParse(parser, false, "2006W273T1020Z");
738 assertParse(parser, false, "2006W273T102Z");
739 assertParse(parser, false, "2006W273T10Z");
740 assertParse(parser, false, "2006W273T1Z");
741 }
742
743
744
745
746 public void test_hourMinute() {
747 DateTimeZone.setDefault(DateTimeZone.UTC);
748 DateTimeFormatter parser = ISODateTimeFormat.hourMinute();
749 assertParse(parser, "10:20", new DateTime(1970, 1, 1, 10, 20, 0, 0));
750 assertParse(parser, "5:6", new DateTime(1970, 1, 1, 5, 6, 0, 0));
751 assertParse(parser, false, "10:20:30.400999999");
752 assertParse(parser, false, "10:20:30.400");
753 assertParse(parser, false, "10:20:30");
754 assertParse(parser, false, "10:20.400");
755 assertParse(parser, false, "10:2.400");
756 assertParse(parser, false, "10.400");
757 assertParse(parser, false, "1.400");
758 }
759
760
761 public void test_hourMinuteSecond() {
762 DateTimeZone.setDefault(DateTimeZone.UTC);
763 DateTimeFormatter parser = ISODateTimeFormat.hourMinuteSecond();
764 assertParse(parser, "10:20:30", new DateTime(1970, 1, 1, 10, 20, 30, 0));
765 assertParse(parser, "5:6:7", new DateTime(1970, 1, 1, 5, 6, 7, 0));
766 assertParse(parser, false, "10:20:30.400999999");
767 assertParse(parser, false, "10:20:30.400");
768 assertParse(parser, false, "10:20:30.4");
769 assertParse(parser, false, "10:20.400");
770 assertParse(parser, false, "10:2.400");
771 assertParse(parser, false, "10.400");
772 assertParse(parser, false, "1.400");
773 }
774
775
776 public void test_hourMinuteSecondMillis() {
777 DateTimeZone.setDefault(DateTimeZone.UTC);
778 DateTimeFormatter parser = ISODateTimeFormat.hourMinuteSecondMillis();
779 assertParse(parser, "10:20:30.400", new DateTime(1970, 1, 1, 10, 20, 30, 400));
780 assertParse(parser, "10:20:30.40", new DateTime(1970, 1, 1, 10, 20, 30, 400));
781 assertParse(parser, "10:20:30.4", new DateTime(1970, 1, 1, 10, 20, 30, 400));
782 assertParse(parser, "5:6:7.8", new DateTime(1970, 1, 1, 5, 6, 7, 800));
783 assertParse(parser, false, "10:20:30.400999999");
784 assertParse(parser, false, "10:20.400");
785 assertParse(parser, false, "10:2.400");
786 assertParse(parser, false, "10.400");
787 assertParse(parser, false, "1.400");
788 }
789
790
791 public void test_hourMinuteSecondFraction() {
792 DateTimeZone.setDefault(DateTimeZone.UTC);
793 DateTimeFormatter parser = ISODateTimeFormat.hourMinuteSecondFraction();
794 assertParse(parser, "10:20:30.400999999", new DateTime(1970, 1, 1, 10, 20, 30, 400));
795 assertParse(parser, "10:20:30.400", new DateTime(1970, 1, 1, 10, 20, 30, 400));
796 assertParse(parser, "10:20:30.40", new DateTime(1970, 1, 1, 10, 20, 30, 400));
797 assertParse(parser, "10:20:30.4", new DateTime(1970, 1, 1, 10, 20, 30, 400));
798 assertParse(parser, "5:6:7.8", new DateTime(1970, 1, 1, 5, 6, 7, 800));
799 assertParse(parser, false, "10:20.400");
800 assertParse(parser, false, "10:2.400");
801 assertParse(parser, false, "10.400");
802 assertParse(parser, false, "1.400");
803 }
804
805
806
807
808 private void assertParse(DateTimeFormatter parser, boolean expected, String str) {
809 if (expected) {
810 parser.parseMillis(str);
811 } else {
812 try {
813 parser.parseMillis(str);
814 fail();
815 } catch (IllegalArgumentException ex) {
816
817 }
818 }
819 }
820
821 private void assertParse(DateTimeFormatter parser, String str, DateTime expected) {
822 DateTime dt = parser.parseDateTime(str);
823 assertEquals(expected, dt);
824 }
825
826 }