1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.lang3.time;
18
19 import static org.apache.commons.lang3.JavaVersion.JAVA_1_4;
20
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertFalse;
23 import static org.junit.Assert.assertNotNull;
24 import static org.junit.Assert.assertNotSame;
25 import static org.junit.Assert.assertTrue;
26 import static org.junit.Assert.fail;
27
28 import java.lang.reflect.Constructor;
29 import java.lang.reflect.Modifier;
30 import java.text.DateFormat;
31 import java.text.ParseException;
32 import java.text.SimpleDateFormat;
33 import java.util.Calendar;
34 import java.util.Date;
35 import java.util.GregorianCalendar;
36 import java.util.Iterator;
37 import java.util.Locale;
38 import java.util.NoSuchElementException;
39 import java.util.TimeZone;
40
41 import junit.framework.AssertionFailedError;
42
43 import org.apache.commons.lang3.SystemUtils;
44
45 import org.junit.Before;
46 import org.junit.Test;
47
48
49
50
51
52 public class DateUtilsTest {
53
54 private static final long MILLIS_TEST;
55 static {
56 final GregorianCalendar cal = new GregorianCalendar(2000, 6, 5, 4, 3, 2);
57 cal.set(Calendar.MILLISECOND, 1);
58 MILLIS_TEST = cal.getTime().getTime();
59 System.out.println("DateUtilsTest: Default Locale="+Locale.getDefault());
60 }
61
62 DateFormat dateParser = null;
63 DateFormat dateTimeParser = null;
64 DateFormat timeZoneDateParser = null;
65 Date dateAmPm1 = null;
66 Date dateAmPm2 = null;
67 Date dateAmPm3 = null;
68 Date dateAmPm4 = null;
69 Date date0 = null;
70 Date date1 = null;
71 Date date2 = null;
72 Date date3 = null;
73 Date date4 = null;
74 Date date5 = null;
75 Date date6 = null;
76 Date date7 = null;
77 Date date8 = null;
78 Calendar calAmPm1 = null;
79 Calendar calAmPm2 = null;
80 Calendar calAmPm3 = null;
81 Calendar calAmPm4 = null;
82 Calendar cal1 = null;
83 Calendar cal2 = null;
84 Calendar cal3 = null;
85 Calendar cal4 = null;
86 Calendar cal5 = null;
87 Calendar cal6 = null;
88 Calendar cal7 = null;
89 Calendar cal8 = null;
90 TimeZone zone = null;
91 TimeZone defaultZone = null;
92
93
94 @Before
95 public void setUp() throws Exception {
96
97
98 dateParser = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
99 dateTimeParser = new SimpleDateFormat("MMM dd, yyyy H:mm:ss.SSS", Locale.ENGLISH);
100
101 dateAmPm1 = dateTimeParser.parse("February 3, 2002 01:10:00.000");
102 dateAmPm2 = dateTimeParser.parse("February 3, 2002 11:10:00.000");
103 dateAmPm3 = dateTimeParser.parse("February 3, 2002 13:10:00.000");
104 dateAmPm4 = dateTimeParser.parse("February 3, 2002 19:10:00.000");
105 date0 = dateTimeParser.parse("February 3, 2002 12:34:56.789");
106 date1 = dateTimeParser.parse("February 12, 2002 12:34:56.789");
107 date2 = dateTimeParser.parse("November 18, 2001 1:23:11.321");
108 defaultZone = TimeZone.getDefault();
109 zone = TimeZone.getTimeZone("MET");
110 TimeZone.setDefault(zone);
111 dateTimeParser.setTimeZone(zone);
112 date3 = dateTimeParser.parse("March 30, 2003 05:30:45.000");
113 date4 = dateTimeParser.parse("March 30, 2003 01:10:00.000");
114 date5 = dateTimeParser.parse("March 30, 2003 01:40:00.000");
115 date6 = dateTimeParser.parse("March 30, 2003 02:10:00.000");
116 date7 = dateTimeParser.parse("March 30, 2003 02:40:00.000");
117 date8 = dateTimeParser.parse("October 26, 2003 05:30:45.000");
118 dateTimeParser.setTimeZone(defaultZone);
119 TimeZone.setDefault(defaultZone);
120 calAmPm1 = Calendar.getInstance();
121 calAmPm1.setTime(dateAmPm1);
122 calAmPm2 = Calendar.getInstance();
123 calAmPm2.setTime(dateAmPm2);
124 calAmPm3 = Calendar.getInstance();
125 calAmPm3.setTime(dateAmPm3);
126 calAmPm4 = Calendar.getInstance();
127 calAmPm4.setTime(dateAmPm4);
128 cal1 = Calendar.getInstance();
129 cal1.setTime(date1);
130 cal2 = Calendar.getInstance();
131 cal2.setTime(date2);
132 TimeZone.setDefault(zone);
133 cal3 = Calendar.getInstance();
134 cal3.setTime(date3);
135 cal4 = Calendar.getInstance();
136 cal4.setTime(date4);
137 cal5 = Calendar.getInstance();
138 cal5.setTime(date5);
139 cal6 = Calendar.getInstance();
140 cal6.setTime(date6);
141 cal7 = Calendar.getInstance();
142 cal7.setTime(date7);
143 cal8 = Calendar.getInstance();
144 cal8.setTime(date8);
145 TimeZone.setDefault(defaultZone);
146 }
147
148
149 @Test
150 public void testConstructor() {
151 assertNotNull(new DateUtils());
152 final Constructor<?>[] cons = DateUtils.class.getDeclaredConstructors();
153 assertEquals(1, cons.length);
154 assertTrue(Modifier.isPublic(cons[0].getModifiers()));
155 assertTrue(Modifier.isPublic(DateUtils.class.getModifiers()));
156 assertFalse(Modifier.isFinal(DateUtils.class.getModifiers()));
157 }
158
159
160 @Test
161 public void testIsSameDay_Date() {
162 Date date1 = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
163 Date date2 = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
164 assertTrue(DateUtils.isSameDay(date1, date2));
165 date2 = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
166 assertFalse(DateUtils.isSameDay(date1, date2));
167 date1 = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
168 assertTrue(DateUtils.isSameDay(date1, date2));
169 date2 = new GregorianCalendar(2005, 6, 10, 13, 45).getTime();
170 assertFalse(DateUtils.isSameDay(date1, date2));
171 try {
172 DateUtils.isSameDay((Date) null, (Date) null);
173 fail();
174 } catch (final IllegalArgumentException ex) {}
175 }
176
177
178 @Test
179 public void testIsSameDay_Cal() {
180 final GregorianCalendar cal1 = new GregorianCalendar(2004, 6, 9, 13, 45);
181 final GregorianCalendar cal2 = new GregorianCalendar(2004, 6, 9, 13, 45);
182 assertTrue(DateUtils.isSameDay(cal1, cal2));
183 cal2.add(Calendar.DAY_OF_YEAR, 1);
184 assertFalse(DateUtils.isSameDay(cal1, cal2));
185 cal1.add(Calendar.DAY_OF_YEAR, 1);
186 assertTrue(DateUtils.isSameDay(cal1, cal2));
187 cal2.add(Calendar.YEAR, 1);
188 assertFalse(DateUtils.isSameDay(cal1, cal2));
189 try {
190 DateUtils.isSameDay((Calendar) null, (Calendar) null);
191 fail();
192 } catch (final IllegalArgumentException ex) {}
193 }
194
195
196 @Test
197 public void testIsSameInstant_Date() {
198 Date date1 = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
199 Date date2 = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
200 assertTrue(DateUtils.isSameInstant(date1, date2));
201 date2 = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
202 assertFalse(DateUtils.isSameInstant(date1, date2));
203 date1 = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
204 assertTrue(DateUtils.isSameInstant(date1, date2));
205 date2 = new GregorianCalendar(2005, 6, 10, 13, 45).getTime();
206 assertFalse(DateUtils.isSameInstant(date1, date2));
207 try {
208 DateUtils.isSameInstant((Date) null, (Date) null);
209 fail();
210 } catch (final IllegalArgumentException ex) {}
211 }
212
213
214 @Test
215 public void testIsSameInstant_Cal() {
216 final GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT+1"));
217 final GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT-1"));
218 cal1.set(2004, 6, 9, 13, 45, 0);
219 cal1.set(Calendar.MILLISECOND, 0);
220 cal2.set(2004, 6, 9, 13, 45, 0);
221 cal2.set(Calendar.MILLISECOND, 0);
222 assertFalse(DateUtils.isSameInstant(cal1, cal2));
223
224 cal2.set(2004, 6, 9, 11, 45, 0);
225 assertTrue(DateUtils.isSameInstant(cal1, cal2));
226 try {
227 DateUtils.isSameInstant((Calendar) null, (Calendar) null);
228 fail();
229 } catch (final IllegalArgumentException ex) {}
230 }
231
232
233 @Test
234 public void testIsSameLocalTime_Cal() {
235 final GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT+1"));
236 final GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT-1"));
237 cal1.set(2004, 6, 9, 13, 45, 0);
238 cal1.set(Calendar.MILLISECOND, 0);
239 cal2.set(2004, 6, 9, 13, 45, 0);
240 cal2.set(Calendar.MILLISECOND, 0);
241 assertTrue(DateUtils.isSameLocalTime(cal1, cal2));
242
243 final Calendar cal3 = Calendar.getInstance();
244 final Calendar cal4 = Calendar.getInstance();
245 cal3.set(2004, 6, 9, 4, 0, 0);
246 cal4.set(2004, 6, 9, 16, 0, 0);
247 cal3.set(Calendar.MILLISECOND, 0);
248 cal4.set(Calendar.MILLISECOND, 0);
249 assertFalse("LANG-677", DateUtils.isSameLocalTime(cal3, cal4));
250
251 cal2.set(2004, 6, 9, 11, 45, 0);
252 assertFalse(DateUtils.isSameLocalTime(cal1, cal2));
253 try {
254 DateUtils.isSameLocalTime((Calendar) null, (Calendar) null);
255 fail();
256 } catch (final IllegalArgumentException ex) {}
257 }
258
259
260 @Test
261 public void testParseDate() throws Exception {
262 final GregorianCalendar cal = new GregorianCalendar(1972, 11, 3);
263 String dateStr = "1972-12-03";
264 final String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
265 Date date = DateUtils.parseDate(dateStr, parsers);
266 assertEquals(cal.getTime(), date);
267
268 dateStr = "1972-338";
269 date = DateUtils.parseDate(dateStr, parsers);
270 assertEquals(cal.getTime(), date);
271
272 dateStr = "19721203";
273 date = DateUtils.parseDate(dateStr, parsers);
274 assertEquals(cal.getTime(), date);
275
276 try {
277 DateUtils.parseDate("PURPLE", parsers);
278 fail();
279 } catch (final ParseException ex) {}
280 try {
281 DateUtils.parseDate("197212AB", parsers);
282 fail();
283 } catch (final ParseException ex) {}
284 try {
285 DateUtils.parseDate(null, parsers);
286 fail();
287 } catch (final IllegalArgumentException ex) {}
288 try {
289 DateUtils.parseDate(dateStr, (String[]) null);
290 fail();
291 } catch (final IllegalArgumentException ex) {}
292 try {
293 DateUtils.parseDate(dateStr, new String[0]);
294 fail();
295 } catch (final ParseException ex) {}
296 }
297
298 @Test
299 public void testParseDateWithLeniency() throws Exception {
300 final GregorianCalendar cal = new GregorianCalendar(1998, 6, 30);
301 final String dateStr = "02 942, 1996";
302 final String[] parsers = new String[] {"MM DDD, yyyy"};
303
304 Date date = DateUtils.parseDate(dateStr, parsers);
305 assertEquals(cal.getTime(), date);
306
307 try {
308 date = DateUtils.parseDateStrictly(dateStr, parsers);
309 fail();
310 } catch (final ParseException ex) {}
311 }
312
313
314 @Test
315 public void testAddYears() throws Exception {
316 final Date base = new Date(MILLIS_TEST);
317 Date result = DateUtils.addYears(base, 0);
318 assertNotSame(base, result);
319 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
320 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
321
322 result = DateUtils.addYears(base, 1);
323 assertNotSame(base, result);
324 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
325 assertDate(result, 2001, 6, 5, 4, 3, 2, 1);
326
327 result = DateUtils.addYears(base, -1);
328 assertNotSame(base, result);
329 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
330 assertDate(result, 1999, 6, 5, 4, 3, 2, 1);
331 }
332
333
334 @Test
335 public void testAddMonths() throws Exception {
336 final Date base = new Date(MILLIS_TEST);
337 Date result = DateUtils.addMonths(base, 0);
338 assertNotSame(base, result);
339 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
340 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
341
342 result = DateUtils.addMonths(base, 1);
343 assertNotSame(base, result);
344 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
345 assertDate(result, 2000, 7, 5, 4, 3, 2, 1);
346
347 result = DateUtils.addMonths(base, -1);
348 assertNotSame(base, result);
349 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
350 assertDate(result, 2000, 5, 5, 4, 3, 2, 1);
351 }
352
353
354 @Test
355 public void testAddWeeks() throws Exception {
356 final Date base = new Date(MILLIS_TEST);
357 Date result = DateUtils.addWeeks(base, 0);
358 assertNotSame(base, result);
359 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
360 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
361
362 result = DateUtils.addWeeks(base, 1);
363 assertNotSame(base, result);
364 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
365 assertDate(result, 2000, 6, 12, 4, 3, 2, 1);
366
367 result = DateUtils.addWeeks(base, -1);
368 assertNotSame(base, result);
369 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
370 assertDate(result, 2000, 5, 28, 4, 3, 2, 1);
371 }
372
373
374 @Test
375 public void testAddDays() throws Exception {
376 final Date base = new Date(MILLIS_TEST);
377 Date result = DateUtils.addDays(base, 0);
378 assertNotSame(base, result);
379 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
380 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
381
382 result = DateUtils.addDays(base, 1);
383 assertNotSame(base, result);
384 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
385 assertDate(result, 2000, 6, 6, 4, 3, 2, 1);
386
387 result = DateUtils.addDays(base, -1);
388 assertNotSame(base, result);
389 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
390 assertDate(result, 2000, 6, 4, 4, 3, 2, 1);
391 }
392
393
394 @Test
395 public void testAddHours() throws Exception {
396 final Date base = new Date(MILLIS_TEST);
397 Date result = DateUtils.addHours(base, 0);
398 assertNotSame(base, result);
399 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
400 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
401
402 result = DateUtils.addHours(base, 1);
403 assertNotSame(base, result);
404 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
405 assertDate(result, 2000, 6, 5, 5, 3, 2, 1);
406
407 result = DateUtils.addHours(base, -1);
408 assertNotSame(base, result);
409 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
410 assertDate(result, 2000, 6, 5, 3, 3, 2, 1);
411 }
412
413
414 @Test
415 public void testAddMinutes() throws Exception {
416 final Date base = new Date(MILLIS_TEST);
417 Date result = DateUtils.addMinutes(base, 0);
418 assertNotSame(base, result);
419 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
420 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
421
422 result = DateUtils.addMinutes(base, 1);
423 assertNotSame(base, result);
424 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
425 assertDate(result, 2000, 6, 5, 4, 4, 2, 1);
426
427 result = DateUtils.addMinutes(base, -1);
428 assertNotSame(base, result);
429 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
430 assertDate(result, 2000, 6, 5, 4, 2, 2, 1);
431 }
432
433
434 @Test
435 public void testAddSeconds() throws Exception {
436 final Date base = new Date(MILLIS_TEST);
437 Date result = DateUtils.addSeconds(base, 0);
438 assertNotSame(base, result);
439 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
440 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
441
442 result = DateUtils.addSeconds(base, 1);
443 assertNotSame(base, result);
444 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
445 assertDate(result, 2000, 6, 5, 4, 3, 3, 1);
446
447 result = DateUtils.addSeconds(base, -1);
448 assertNotSame(base, result);
449 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
450 assertDate(result, 2000, 6, 5, 4, 3, 1, 1);
451 }
452
453
454 @Test
455 public void testAddMilliseconds() throws Exception {
456 final Date base = new Date(MILLIS_TEST);
457 Date result = DateUtils.addMilliseconds(base, 0);
458 assertNotSame(base, result);
459 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
460 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
461
462 result = DateUtils.addMilliseconds(base, 1);
463 assertNotSame(base, result);
464 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
465 assertDate(result, 2000, 6, 5, 4, 3, 2, 2);
466
467 result = DateUtils.addMilliseconds(base, -1);
468 assertNotSame(base, result);
469 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
470 assertDate(result, 2000, 6, 5, 4, 3, 2, 0);
471 }
472
473
474 @Test
475 public void testSetYears() throws Exception {
476 final Date base = new Date(MILLIS_TEST);
477 Date result = DateUtils.setYears(base, 2000);
478 assertNotSame(base, result);
479 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
480 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
481
482 result = DateUtils.setYears(base, 2008);
483 assertNotSame(base, result);
484 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
485 assertDate(result, 2008, 6, 5, 4, 3, 2, 1);
486
487 result = DateUtils.setYears(base, 2005);
488 assertNotSame(base, result);
489 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
490 assertDate(result, 2005, 6, 5, 4, 3, 2, 1);
491 }
492
493
494 @Test
495 public void testSetMonths() throws Exception {
496 final Date base = new Date(MILLIS_TEST);
497 Date result = DateUtils.setMonths(base, 5);
498 assertNotSame(base, result);
499 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
500 assertDate(result, 2000, 5, 5, 4, 3, 2, 1);
501
502 result = DateUtils.setMonths(base, 1);
503 assertNotSame(base, result);
504 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
505 assertDate(result, 2000, 1, 5, 4, 3, 2, 1);
506
507 try {
508 result = DateUtils.setMonths(base, 12);
509 fail("DateUtils.setMonths did not throw an expected IllegalArguementException.");
510 } catch (final IllegalArgumentException e) {
511
512 }
513 }
514
515
516 @Test
517 public void testSetDays() throws Exception {
518 final Date base = new Date(MILLIS_TEST);
519 Date result = DateUtils.setDays(base, 1);
520 assertNotSame(base, result);
521 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
522 assertDate(result, 2000, 6, 1, 4, 3, 2, 1);
523
524 result = DateUtils.setDays(base, 29);
525 assertNotSame(base, result);
526 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
527 assertDate(result, 2000, 6, 29, 4, 3, 2, 1);
528
529 try {
530 result = DateUtils.setDays(base, 32);
531 fail("DateUtils.setDays did not throw an expected IllegalArguementException.");
532 } catch (final IllegalArgumentException e) {
533
534 }
535 }
536
537
538 @Test
539 public void testSetHours() throws Exception {
540 final Date base = new Date(MILLIS_TEST);
541 Date result = DateUtils.setHours(base, 0);
542 assertNotSame(base, result);
543 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
544 assertDate(result, 2000, 6, 5, 0, 3, 2, 1);
545
546 result = DateUtils.setHours(base, 23);
547 assertNotSame(base, result);
548 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
549 assertDate(result, 2000, 6, 5, 23, 3, 2, 1);
550
551 try {
552 result = DateUtils.setHours(base, 24);
553 fail("DateUtils.setHours did not throw an expected IllegalArguementException.");
554 } catch (final IllegalArgumentException e) {
555
556 }
557 }
558
559
560 @Test
561 public void testSetMinutes() throws Exception {
562 final Date base = new Date(MILLIS_TEST);
563 Date result = DateUtils.setMinutes(base, 0);
564 assertNotSame(base, result);
565 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
566 assertDate(result, 2000, 6, 5, 4, 0, 2, 1);
567
568 result = DateUtils.setMinutes(base, 59);
569 assertNotSame(base, result);
570 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
571 assertDate(result, 2000, 6, 5, 4, 59, 2, 1);
572
573 try {
574 result = DateUtils.setMinutes(base, 60);
575 fail("DateUtils.setMinutes did not throw an expected IllegalArguementException.");
576 } catch (final IllegalArgumentException e) {
577
578 }
579 }
580
581
582 @Test
583 public void testSetSeconds() throws Exception {
584 final Date base = new Date(MILLIS_TEST);
585 Date result = DateUtils.setSeconds(base, 0);
586 assertNotSame(base, result);
587 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
588 assertDate(result, 2000, 6, 5, 4, 3, 0, 1);
589
590 result = DateUtils.setSeconds(base, 59);
591 assertNotSame(base, result);
592 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
593 assertDate(result, 2000, 6, 5, 4, 3, 59, 1);
594
595 try {
596 result = DateUtils.setSeconds(base, 60);
597 fail("DateUtils.setSeconds did not throw an expected IllegalArguementException.");
598 } catch (final IllegalArgumentException e) {
599
600 }
601 }
602
603
604 @Test
605 public void testSetMilliseconds() throws Exception {
606 final Date base = new Date(MILLIS_TEST);
607 Date result = DateUtils.setMilliseconds(base, 0);
608 assertNotSame(base, result);
609 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
610 assertDate(result, 2000, 6, 5, 4, 3, 2, 0);
611
612 result = DateUtils.setMilliseconds(base, 999);
613 assertNotSame(base, result);
614 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
615 assertDate(result, 2000, 6, 5, 4, 3, 2, 999);
616
617 try {
618 result = DateUtils.setMilliseconds(base, 1000);
619 fail("DateUtils.setMilliseconds did not throw an expected IllegalArguementException.");
620 } catch (final IllegalArgumentException e) {
621
622 }
623 }
624
625
626 private void assertDate(final Date date, final int year, final int month, final int day, final int hour, final int min, final int sec, final int mil) throws Exception {
627 final GregorianCalendar cal = new GregorianCalendar();
628 cal.setTime(date);
629 assertEquals(year, cal.get(Calendar.YEAR));
630 assertEquals(month, cal.get(Calendar.MONTH));
631 assertEquals(day, cal.get(Calendar.DAY_OF_MONTH));
632 assertEquals(hour, cal.get(Calendar.HOUR_OF_DAY));
633 assertEquals(min, cal.get(Calendar.MINUTE));
634 assertEquals(sec, cal.get(Calendar.SECOND));
635 assertEquals(mil, cal.get(Calendar.MILLISECOND));
636 }
637
638
639 @Test
640 public void testToCalendar() {
641 assertEquals("Failed to convert to a Calendar and back", date1, DateUtils.toCalendar(date1).getTime());
642 try {
643 DateUtils.toCalendar(null);
644 fail("Expected NullPointerException to be thrown");
645 } catch(final NullPointerException npe) {
646
647 }
648 }
649
650
651
652
653
654 @Test
655 public void testRound() throws Exception {
656
657 assertEquals("round year-1 failed",
658 dateParser.parse("January 1, 2002"),
659 DateUtils.round(date1, Calendar.YEAR));
660 assertEquals("round year-2 failed",
661 dateParser.parse("January 1, 2002"),
662 DateUtils.round(date2, Calendar.YEAR));
663 assertEquals("round month-1 failed",
664 dateParser.parse("February 1, 2002"),
665 DateUtils.round(date1, Calendar.MONTH));
666 assertEquals("round month-2 failed",
667 dateParser.parse("December 1, 2001"),
668 DateUtils.round(date2, Calendar.MONTH));
669 assertEquals("round semimonth-0 failed",
670 dateParser.parse("February 1, 2002"),
671 DateUtils.round(date0, DateUtils.SEMI_MONTH));
672 assertEquals("round semimonth-1 failed",
673 dateParser.parse("February 16, 2002"),
674 DateUtils.round(date1, DateUtils.SEMI_MONTH));
675 assertEquals("round semimonth-2 failed",
676 dateParser.parse("November 16, 2001"),
677 DateUtils.round(date2, DateUtils.SEMI_MONTH));
678
679
680 assertEquals("round date-1 failed",
681 dateParser.parse("February 13, 2002"),
682 DateUtils.round(date1, Calendar.DATE));
683 assertEquals("round date-2 failed",
684 dateParser.parse("November 18, 2001"),
685 DateUtils.round(date2, Calendar.DATE));
686 assertEquals("round hour-1 failed",
687 dateTimeParser.parse("February 12, 2002 13:00:00.000"),
688 DateUtils.round(date1, Calendar.HOUR));
689 assertEquals("round hour-2 failed",
690 dateTimeParser.parse("November 18, 2001 1:00:00.000"),
691 DateUtils.round(date2, Calendar.HOUR));
692 assertEquals("round minute-1 failed",
693 dateTimeParser.parse("February 12, 2002 12:35:00.000"),
694 DateUtils.round(date1, Calendar.MINUTE));
695 assertEquals("round minute-2 failed",
696 dateTimeParser.parse("November 18, 2001 1:23:00.000"),
697 DateUtils.round(date2, Calendar.MINUTE));
698 assertEquals("round second-1 failed",
699 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
700 DateUtils.round(date1, Calendar.SECOND));
701 assertEquals("round second-2 failed",
702 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
703 DateUtils.round(date2, Calendar.SECOND));
704 assertEquals("round ampm-1 failed",
705 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
706 DateUtils.round(dateAmPm1, Calendar.AM_PM));
707 assertEquals("round ampm-2 failed",
708 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
709 DateUtils.round(dateAmPm2, Calendar.AM_PM));
710 assertEquals("round ampm-3 failed",
711 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
712 DateUtils.round(dateAmPm3, Calendar.AM_PM));
713 assertEquals("round ampm-4 failed",
714 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
715 DateUtils.round(dateAmPm4, Calendar.AM_PM));
716
717
718 assertEquals("round year-1 failed",
719 dateParser.parse("January 1, 2002"),
720 DateUtils.round((Object) date1, Calendar.YEAR));
721 assertEquals("round year-2 failed",
722 dateParser.parse("January 1, 2002"),
723 DateUtils.round((Object) date2, Calendar.YEAR));
724 assertEquals("round month-1 failed",
725 dateParser.parse("February 1, 2002"),
726 DateUtils.round((Object) date1, Calendar.MONTH));
727 assertEquals("round month-2 failed",
728 dateParser.parse("December 1, 2001"),
729 DateUtils.round((Object) date2, Calendar.MONTH));
730 assertEquals("round semimonth-1 failed",
731 dateParser.parse("February 16, 2002"),
732 DateUtils.round((Object) date1, DateUtils.SEMI_MONTH));
733 assertEquals("round semimonth-2 failed",
734 dateParser.parse("November 16, 2001"),
735 DateUtils.round((Object) date2, DateUtils.SEMI_MONTH));
736 assertEquals("round date-1 failed",
737 dateParser.parse("February 13, 2002"),
738 DateUtils.round((Object) date1, Calendar.DATE));
739 assertEquals("round date-2 failed",
740 dateParser.parse("November 18, 2001"),
741 DateUtils.round((Object) date2, Calendar.DATE));
742 assertEquals("round hour-1 failed",
743 dateTimeParser.parse("February 12, 2002 13:00:00.000"),
744 DateUtils.round((Object) date1, Calendar.HOUR));
745 assertEquals("round hour-2 failed",
746 dateTimeParser.parse("November 18, 2001 1:00:00.000"),
747 DateUtils.round((Object) date2, Calendar.HOUR));
748 assertEquals("round minute-1 failed",
749 dateTimeParser.parse("February 12, 2002 12:35:00.000"),
750 DateUtils.round((Object) date1, Calendar.MINUTE));
751 assertEquals("round minute-2 failed",
752 dateTimeParser.parse("November 18, 2001 1:23:00.000"),
753 DateUtils.round((Object) date2, Calendar.MINUTE));
754 assertEquals("round second-1 failed",
755 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
756 DateUtils.round((Object) date1, Calendar.SECOND));
757 assertEquals("round second-2 failed",
758 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
759 DateUtils.round((Object) date2, Calendar.SECOND));
760 assertEquals("round calendar second-1 failed",
761 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
762 DateUtils.round((Object) cal1, Calendar.SECOND));
763 assertEquals("round calendar second-2 failed",
764 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
765 DateUtils.round((Object) cal2, Calendar.SECOND));
766 assertEquals("round ampm-1 failed",
767 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
768 DateUtils.round((Object) dateAmPm1, Calendar.AM_PM));
769 assertEquals("round ampm-2 failed",
770 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
771 DateUtils.round((Object) dateAmPm2, Calendar.AM_PM));
772 assertEquals("round ampm-3 failed",
773 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
774 DateUtils.round((Object) dateAmPm3, Calendar.AM_PM));
775 assertEquals("round ampm-4 failed",
776 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
777 DateUtils.round((Object) dateAmPm4, Calendar.AM_PM));
778
779 try {
780 DateUtils.round((Date) null, Calendar.SECOND);
781 fail();
782 } catch (final IllegalArgumentException ex) {}
783 try {
784 DateUtils.round((Calendar) null, Calendar.SECOND);
785 fail();
786 } catch (final IllegalArgumentException ex) {}
787 try {
788 DateUtils.round((Object) null, Calendar.SECOND);
789 fail();
790 } catch (final IllegalArgumentException ex) {}
791 try {
792 DateUtils.round("", Calendar.SECOND);
793 fail();
794 } catch (final ClassCastException ex) {}
795 try {
796 DateUtils.round(date1, -9999);
797 fail();
798 } catch(final IllegalArgumentException ex) {}
799
800 assertEquals("round ampm-1 failed",
801 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
802 DateUtils.round((Object) calAmPm1, Calendar.AM_PM));
803 assertEquals("round ampm-2 failed",
804 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
805 DateUtils.round((Object) calAmPm2, Calendar.AM_PM));
806 assertEquals("round ampm-3 failed",
807 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
808 DateUtils.round((Object) calAmPm3, Calendar.AM_PM));
809 assertEquals("round ampm-4 failed",
810 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
811 DateUtils.round((Object) calAmPm4, Calendar.AM_PM));
812
813
814
815 TimeZone.setDefault(zone);
816 dateTimeParser.setTimeZone(zone);
817 assertEquals("round MET date across DST change-over",
818 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
819 DateUtils.round(date4, Calendar.DATE));
820 assertEquals("round MET date across DST change-over",
821 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
822 DateUtils.round((Object) cal4, Calendar.DATE));
823 assertEquals("round MET date across DST change-over",
824 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
825 DateUtils.round(date5, Calendar.DATE));
826 assertEquals("round MET date across DST change-over",
827 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
828 DateUtils.round((Object) cal5, Calendar.DATE));
829 assertEquals("round MET date across DST change-over",
830 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
831 DateUtils.round(date6, Calendar.DATE));
832 assertEquals("round MET date across DST change-over",
833 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
834 DateUtils.round((Object) cal6, Calendar.DATE));
835 assertEquals("round MET date across DST change-over",
836 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
837 DateUtils.round(date7, Calendar.DATE));
838 assertEquals("round MET date across DST change-over",
839 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
840 DateUtils.round((Object) cal7, Calendar.DATE));
841
842 assertEquals("round MET date across DST change-over",
843 dateTimeParser.parse("March 30, 2003 01:00:00.000"),
844 DateUtils.round(date4, Calendar.HOUR_OF_DAY));
845 assertEquals("round MET date across DST change-over",
846 dateTimeParser.parse("March 30, 2003 01:00:00.000"),
847 DateUtils.round((Object) cal4, Calendar.HOUR_OF_DAY));
848 if (SystemUtils.isJavaVersionAtLeast(JAVA_1_4)) {
849 assertEquals("round MET date across DST change-over",
850 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
851 DateUtils.round(date5, Calendar.HOUR_OF_DAY));
852 assertEquals("round MET date across DST change-over",
853 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
854 DateUtils.round((Object) cal5, Calendar.HOUR_OF_DAY));
855 assertEquals("round MET date across DST change-over",
856 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
857 DateUtils.round(date6, Calendar.HOUR_OF_DAY));
858 assertEquals("round MET date across DST change-over",
859 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
860 DateUtils.round((Object) cal6, Calendar.HOUR_OF_DAY));
861 assertEquals("round MET date across DST change-over",
862 dateTimeParser.parse("March 30, 2003 04:00:00.000"),
863 DateUtils.round(date7, Calendar.HOUR_OF_DAY));
864 assertEquals("round MET date across DST change-over",
865 dateTimeParser.parse("March 30, 2003 04:00:00.000"),
866 DateUtils.round((Object) cal7, Calendar.HOUR_OF_DAY));
867 } else {
868 this.warn("WARNING: Some date rounding tests not run since the current version is " + SystemUtils.JAVA_SPECIFICATION_VERSION);
869 }
870 TimeZone.setDefault(defaultZone);
871 dateTimeParser.setTimeZone(defaultZone);
872 }
873
874
875
876
877
878 @Test
879 public void testRoundLang346() throws Exception
880 {
881 TimeZone.setDefault(defaultZone);
882 dateTimeParser.setTimeZone(defaultZone);
883 final Calendar testCalendar = Calendar.getInstance();
884 testCalendar.set(2007, 6, 2, 8, 8, 50);
885 Date date = testCalendar.getTime();
886 assertEquals("Minute Round Up Failed",
887 dateTimeParser.parse("July 2, 2007 08:09:00.000"),
888 DateUtils.round(date, Calendar.MINUTE));
889
890 testCalendar.set(2007, 6, 2, 8, 8, 20);
891 date = testCalendar.getTime();
892 assertEquals("Minute No Round Failed",
893 dateTimeParser.parse("July 2, 2007 08:08:00.000"),
894 DateUtils.round(date, Calendar.MINUTE));
895
896 testCalendar.set(2007, 6, 2, 8, 8, 50);
897 testCalendar.set(Calendar.MILLISECOND, 600);
898 date = testCalendar.getTime();
899
900 assertEquals("Second Round Up with 600 Milli Seconds Failed",
901 dateTimeParser.parse("July 2, 2007 08:08:51.000"),
902 DateUtils.round(date, Calendar.SECOND));
903
904 testCalendar.set(2007, 6, 2, 8, 8, 50);
905 testCalendar.set(Calendar.MILLISECOND, 200);
906 date = testCalendar.getTime();
907 assertEquals("Second Round Down with 200 Milli Seconds Failed",
908 dateTimeParser.parse("July 2, 2007 08:08:50.000"),
909 DateUtils.round(date, Calendar.SECOND));
910
911 testCalendar.set(2007, 6, 2, 8, 8, 20);
912 testCalendar.set(Calendar.MILLISECOND, 600);
913 date = testCalendar.getTime();
914 assertEquals("Second Round Up with 200 Milli Seconds Failed",
915 dateTimeParser.parse("July 2, 2007 08:08:21.000"),
916 DateUtils.round(date, Calendar.SECOND));
917
918 testCalendar.set(2007, 6, 2, 8, 8, 20);
919 testCalendar.set(Calendar.MILLISECOND, 200);
920 date = testCalendar.getTime();
921 assertEquals("Second Round Down with 200 Milli Seconds Failed",
922 dateTimeParser.parse("July 2, 2007 08:08:20.000"),
923 DateUtils.round(date, Calendar.SECOND));
924
925 testCalendar.set(2007, 6, 2, 8, 8, 50);
926 date = testCalendar.getTime();
927 assertEquals("Hour Round Down Failed",
928 dateTimeParser.parse("July 2, 2007 08:00:00.000"),
929 DateUtils.round(date, Calendar.HOUR));
930
931 testCalendar.set(2007, 6, 2, 8, 31, 50);
932 date = testCalendar.getTime();
933 assertEquals("Hour Round Up Failed",
934 dateTimeParser.parse("July 2, 2007 09:00:00.000"),
935 DateUtils.round(date, Calendar.HOUR));
936 }
937
938
939
940
941 @Test
942 public void testTruncate() throws Exception {
943
944 assertEquals("truncate year-1 failed",
945 dateParser.parse("January 1, 2002"),
946 DateUtils.truncate(date1, Calendar.YEAR));
947 assertEquals("truncate year-2 failed",
948 dateParser.parse("January 1, 2001"),
949 DateUtils.truncate(date2, Calendar.YEAR));
950 assertEquals("truncate month-1 failed",
951 dateParser.parse("February 1, 2002"),
952 DateUtils.truncate(date1, Calendar.MONTH));
953 assertEquals("truncate month-2 failed",
954 dateParser.parse("November 1, 2001"),
955 DateUtils.truncate(date2, Calendar.MONTH));
956 assertEquals("truncate semimonth-1 failed",
957 dateParser.parse("February 1, 2002"),
958 DateUtils.truncate(date1, DateUtils.SEMI_MONTH));
959 assertEquals("truncate semimonth-2 failed",
960 dateParser.parse("November 16, 2001"),
961 DateUtils.truncate(date2, DateUtils.SEMI_MONTH));
962 assertEquals("truncate date-1 failed",
963 dateParser.parse("February 12, 2002"),
964 DateUtils.truncate(date1, Calendar.DATE));
965 assertEquals("truncate date-2 failed",
966 dateParser.parse("November 18, 2001"),
967 DateUtils.truncate(date2, Calendar.DATE));
968 assertEquals("truncate hour-1 failed",
969 dateTimeParser.parse("February 12, 2002 12:00:00.000"),
970 DateUtils.truncate(date1, Calendar.HOUR));
971 assertEquals("truncate hour-2 failed",
972 dateTimeParser.parse("November 18, 2001 1:00:00.000"),
973 DateUtils.truncate(date2, Calendar.HOUR));
974 assertEquals("truncate minute-1 failed",
975 dateTimeParser.parse("February 12, 2002 12:34:00.000"),
976 DateUtils.truncate(date1, Calendar.MINUTE));
977 assertEquals("truncate minute-2 failed",
978 dateTimeParser.parse("November 18, 2001 1:23:00.000"),
979 DateUtils.truncate(date2, Calendar.MINUTE));
980 assertEquals("truncate second-1 failed",
981 dateTimeParser.parse("February 12, 2002 12:34:56.000"),
982 DateUtils.truncate(date1, Calendar.SECOND));
983 assertEquals("truncate second-2 failed",
984 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
985 DateUtils.truncate(date2, Calendar.SECOND));
986 assertEquals("truncate ampm-1 failed",
987 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
988 DateUtils.truncate(dateAmPm1, Calendar.AM_PM));
989 assertEquals("truncate ampm-2 failed",
990 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
991 DateUtils.truncate(dateAmPm2, Calendar.AM_PM));
992 assertEquals("truncate ampm-3 failed",
993 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
994 DateUtils.truncate(dateAmPm3, Calendar.AM_PM));
995 assertEquals("truncate ampm-4 failed",
996 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
997 DateUtils.truncate(dateAmPm4, Calendar.AM_PM));
998
999
1000 assertEquals("truncate year-1 failed",
1001 dateParser.parse("January 1, 2002"),
1002 DateUtils.truncate((Object) date1, Calendar.YEAR));
1003 assertEquals("truncate year-2 failed",
1004 dateParser.parse("January 1, 2001"),
1005 DateUtils.truncate((Object) date2, Calendar.YEAR));
1006 assertEquals("truncate month-1 failed",
1007 dateParser.parse("February 1, 2002"),
1008 DateUtils.truncate((Object) date1, Calendar.MONTH));
1009 assertEquals("truncate month-2 failed",
1010 dateParser.parse("November 1, 2001"),
1011 DateUtils.truncate((Object) date2, Calendar.MONTH));
1012 assertEquals("truncate semimonth-1 failed",
1013 dateParser.parse("February 1, 2002"),
1014 DateUtils.truncate((Object) date1, DateUtils.SEMI_MONTH));
1015 assertEquals("truncate semimonth-2 failed",
1016 dateParser.parse("November 16, 2001"),
1017 DateUtils.truncate((Object) date2, DateUtils.SEMI_MONTH));
1018 assertEquals("truncate date-1 failed",
1019 dateParser.parse("February 12, 2002"),
1020 DateUtils.truncate((Object) date1, Calendar.DATE));
1021 assertEquals("truncate date-2 failed",
1022 dateParser.parse("November 18, 2001"),
1023 DateUtils.truncate((Object) date2, Calendar.DATE));
1024 assertEquals("truncate hour-1 failed",
1025 dateTimeParser.parse("February 12, 2002 12:00:00.000"),
1026 DateUtils.truncate((Object) date1, Calendar.HOUR));
1027 assertEquals("truncate hour-2 failed",
1028 dateTimeParser.parse("November 18, 2001 1:00:00.000"),
1029 DateUtils.truncate((Object) date2, Calendar.HOUR));
1030 assertEquals("truncate minute-1 failed",
1031 dateTimeParser.parse("February 12, 2002 12:34:00.000"),
1032 DateUtils.truncate((Object) date1, Calendar.MINUTE));
1033 assertEquals("truncate minute-2 failed",
1034 dateTimeParser.parse("November 18, 2001 1:23:00.000"),
1035 DateUtils.truncate((Object) date2, Calendar.MINUTE));
1036 assertEquals("truncate second-1 failed",
1037 dateTimeParser.parse("February 12, 2002 12:34:56.000"),
1038 DateUtils.truncate((Object) date1, Calendar.SECOND));
1039 assertEquals("truncate second-2 failed",
1040 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
1041 DateUtils.truncate((Object) date2, Calendar.SECOND));
1042 assertEquals("truncate ampm-1 failed",
1043 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
1044 DateUtils.truncate((Object) dateAmPm1, Calendar.AM_PM));
1045 assertEquals("truncate ampm-2 failed",
1046 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
1047 DateUtils.truncate((Object) dateAmPm2, Calendar.AM_PM));
1048 assertEquals("truncate ampm-3 failed",
1049 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1050 DateUtils.truncate((Object) dateAmPm3, Calendar.AM_PM));
1051 assertEquals("truncate ampm-4 failed",
1052 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1053 DateUtils.truncate((Object) dateAmPm4, Calendar.AM_PM));
1054
1055 assertEquals("truncate calendar second-1 failed",
1056 dateTimeParser.parse("February 12, 2002 12:34:56.000"),
1057 DateUtils.truncate((Object) cal1, Calendar.SECOND));
1058 assertEquals("truncate calendar second-2 failed",
1059 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
1060 DateUtils.truncate((Object) cal2, Calendar.SECOND));
1061
1062 assertEquals("truncate ampm-1 failed",
1063 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
1064 DateUtils.truncate((Object) calAmPm1, Calendar.AM_PM));
1065 assertEquals("truncate ampm-2 failed",
1066 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
1067 DateUtils.truncate((Object) calAmPm2, Calendar.AM_PM));
1068 assertEquals("truncate ampm-3 failed",
1069 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1070 DateUtils.truncate((Object) calAmPm3, Calendar.AM_PM));
1071 assertEquals("truncate ampm-4 failed",
1072 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1073 DateUtils.truncate((Object) calAmPm4, Calendar.AM_PM));
1074
1075 try {
1076 DateUtils.truncate((Date) null, Calendar.SECOND);
1077 fail();
1078 } catch (final IllegalArgumentException ex) {}
1079 try {
1080 DateUtils.truncate((Calendar) null, Calendar.SECOND);
1081 fail();
1082 } catch (final IllegalArgumentException ex) {}
1083 try {
1084 DateUtils.truncate((Object) null, Calendar.SECOND);
1085 fail();
1086 } catch (final IllegalArgumentException ex) {}
1087 try {
1088 DateUtils.truncate("", Calendar.SECOND);
1089 fail();
1090 } catch (final ClassCastException ex) {}
1091
1092
1093
1094 TimeZone.setDefault(zone);
1095 dateTimeParser.setTimeZone(zone);
1096 assertEquals("truncate MET date across DST change-over",
1097 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
1098 DateUtils.truncate(date3, Calendar.DATE));
1099 assertEquals("truncate MET date across DST change-over",
1100 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
1101 DateUtils.truncate((Object) cal3, Calendar.DATE));
1102
1103 assertEquals("truncate MET date across DST change-over",
1104 dateTimeParser.parse("October 26, 2003 00:00:00.000"),
1105 DateUtils.truncate(date8, Calendar.DATE));
1106 assertEquals("truncate MET date across DST change-over",
1107 dateTimeParser.parse("October 26, 2003 00:00:00.000"),
1108 DateUtils.truncate((Object) cal8, Calendar.DATE));
1109 TimeZone.setDefault(defaultZone);
1110 dateTimeParser.setTimeZone(defaultZone);
1111
1112
1113 final Date endOfTime = new Date(Long.MAX_VALUE);
1114 final GregorianCalendar endCal = new GregorianCalendar();
1115 endCal.setTime(endOfTime);
1116 try {
1117 DateUtils.truncate(endCal, Calendar.DATE);
1118 fail();
1119 } catch (final ArithmeticException ex) {}
1120 endCal.set(Calendar.YEAR, 280000001);
1121 try {
1122 DateUtils.truncate(endCal, Calendar.DATE);
1123 fail();
1124 } catch (final ArithmeticException ex) {}
1125 endCal.set(Calendar.YEAR, 280000000);
1126 final Calendar cal = DateUtils.truncate(endCal, Calendar.DATE);
1127 assertEquals(0, cal.get(Calendar.HOUR));
1128 }
1129
1130
1131
1132
1133
1134
1135 @Test
1136 public void testTruncateLang59() throws Exception {
1137 if (!SystemUtils.isJavaVersionAtLeast(JAVA_1_4)) {
1138 this.warn("WARNING: Test for LANG-59 not run since the current version is " + SystemUtils.JAVA_SPECIFICATION_VERSION);
1139 return;
1140 }
1141
1142
1143 final TimeZone MST_MDT = TimeZone.getTimeZone("MST7MDT");
1144 TimeZone.setDefault(MST_MDT);
1145 final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
1146 format.setTimeZone(MST_MDT);
1147
1148 final Date oct31_01MDT = new Date(1099206000000L);
1149
1150 final Date oct31MDT = new Date(oct31_01MDT.getTime() - 3600000L);
1151 final Date oct31_01_02MDT = new Date(oct31_01MDT.getTime() + 120000L);
1152 final Date oct31_01_02_03MDT = new Date(oct31_01_02MDT.getTime() + 3000L);
1153 final Date oct31_01_02_03_04MDT = new Date(oct31_01_02_03MDT.getTime() + 4L);
1154
1155 assertEquals("Check 00:00:00.000", "2004-10-31 00:00:00.000 MDT", format.format(oct31MDT));
1156 assertEquals("Check 01:00:00.000", "2004-10-31 01:00:00.000 MDT", format.format(oct31_01MDT));
1157 assertEquals("Check 01:02:00.000", "2004-10-31 01:02:00.000 MDT", format.format(oct31_01_02MDT));
1158 assertEquals("Check 01:02:03.000", "2004-10-31 01:02:03.000 MDT", format.format(oct31_01_02_03MDT));
1159 assertEquals("Check 01:02:03.004", "2004-10-31 01:02:03.004 MDT", format.format(oct31_01_02_03_04MDT));
1160
1161
1162 final Calendar gval = Calendar.getInstance();
1163 gval.setTime(new Date(oct31_01MDT.getTime()));
1164 gval.set(Calendar.MINUTE, gval.get(Calendar.MINUTE));
1165 assertEquals("Demonstrate Problem", gval.getTime().getTime(), oct31_01MDT.getTime() + 3600000L);
1166
1167
1168 assertEquals("Truncate Calendar.MILLISECOND",
1169 oct31_01_02_03_04MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.MILLISECOND));
1170
1171 assertEquals("Truncate Calendar.SECOND",
1172 oct31_01_02_03MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.SECOND));
1173
1174 assertEquals("Truncate Calendar.MINUTE",
1175 oct31_01_02MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.MINUTE));
1176
1177 assertEquals("Truncate Calendar.HOUR_OF_DAY",
1178 oct31_01MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.HOUR_OF_DAY));
1179
1180 assertEquals("Truncate Calendar.HOUR",
1181 oct31_01MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.HOUR));
1182
1183 assertEquals("Truncate Calendar.DATE",
1184 oct31MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.DATE));
1185
1186
1187
1188 assertEquals("Round Calendar.MILLISECOND",
1189 oct31_01_02_03_04MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.MILLISECOND));
1190
1191 assertEquals("Round Calendar.SECOND",
1192 oct31_01_02_03MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.SECOND));
1193
1194 assertEquals("Round Calendar.MINUTE",
1195 oct31_01_02MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.MINUTE));
1196
1197 assertEquals("Round Calendar.HOUR_OF_DAY",
1198 oct31_01MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.HOUR_OF_DAY));
1199
1200 assertEquals("Round Calendar.HOUR",
1201 oct31_01MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.HOUR));
1202
1203 assertEquals("Round Calendar.DATE",
1204 oct31MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.DATE));
1205
1206
1207 TimeZone.setDefault(defaultZone);
1208 }
1209
1210
1211 @Test
1212 public void testLang530() throws ParseException {
1213 final Date d = new Date();
1214 final String isoDateStr = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(d);
1215 final Date d2 = DateUtils.parseDate(isoDateStr, new String[] { DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern() });
1216
1217 assertEquals("Date not equal to itself ISO formatted and parsed", d.getTime(), d2.getTime() + d.getTime() % 1000);
1218 }
1219
1220
1221
1222
1223 @Test
1224 public void testCeil() throws Exception {
1225
1226 assertEquals("ceiling javadoc-1 failed",
1227 dateTimeParser.parse("March 28, 2002 14:00:00.000"),
1228 DateUtils.ceiling(
1229 dateTimeParser.parse("March 28, 2002 13:45:01.231"),
1230 Calendar.HOUR));
1231 assertEquals("ceiling javadoc-2 failed",
1232 dateTimeParser.parse("April 1, 2002 00:00:00.000"),
1233 DateUtils.ceiling(
1234 dateTimeParser.parse("March 28, 2002 13:45:01.231"),
1235 Calendar.MONTH));
1236
1237
1238 assertEquals("ceiling year-1 failed",
1239 dateParser.parse("January 1, 2003"),
1240 DateUtils.ceiling(date1, Calendar.YEAR));
1241 assertEquals("ceiling year-2 failed",
1242 dateParser.parse("January 1, 2002"),
1243 DateUtils.ceiling(date2, Calendar.YEAR));
1244 assertEquals("ceiling month-1 failed",
1245 dateParser.parse("March 1, 2002"),
1246 DateUtils.ceiling(date1, Calendar.MONTH));
1247 assertEquals("ceiling month-2 failed",
1248 dateParser.parse("December 1, 2001"),
1249 DateUtils.ceiling(date2, Calendar.MONTH));
1250 assertEquals("ceiling semimonth-1 failed",
1251 dateParser.parse("February 16, 2002"),
1252 DateUtils.ceiling(date1, DateUtils.SEMI_MONTH));
1253 assertEquals("ceiling semimonth-2 failed",
1254 dateParser.parse("December 1, 2001"),
1255 DateUtils.ceiling(date2, DateUtils.SEMI_MONTH));
1256 assertEquals("ceiling date-1 failed",
1257 dateParser.parse("February 13, 2002"),
1258 DateUtils.ceiling(date1, Calendar.DATE));
1259 assertEquals("ceiling date-2 failed",
1260 dateParser.parse("November 19, 2001"),
1261 DateUtils.ceiling(date2, Calendar.DATE));
1262 assertEquals("ceiling hour-1 failed",
1263 dateTimeParser.parse("February 12, 2002 13:00:00.000"),
1264 DateUtils.ceiling(date1, Calendar.HOUR));
1265 assertEquals("ceiling hour-2 failed",
1266 dateTimeParser.parse("November 18, 2001 2:00:00.000"),
1267 DateUtils.ceiling(date2, Calendar.HOUR));
1268 assertEquals("ceiling minute-1 failed",
1269 dateTimeParser.parse("February 12, 2002 12:35:00.000"),
1270 DateUtils.ceiling(date1, Calendar.MINUTE));
1271 assertEquals("ceiling minute-2 failed",
1272 dateTimeParser.parse("November 18, 2001 1:24:00.000"),
1273 DateUtils.ceiling(date2, Calendar.MINUTE));
1274 assertEquals("ceiling second-1 failed",
1275 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
1276 DateUtils.ceiling(date1, Calendar.SECOND));
1277 assertEquals("ceiling second-2 failed",
1278 dateTimeParser.parse("November 18, 2001 1:23:12.000"),
1279 DateUtils.ceiling(date2, Calendar.SECOND));
1280 assertEquals("ceiling ampm-1 failed",
1281 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1282 DateUtils.ceiling(dateAmPm1, Calendar.AM_PM));
1283 assertEquals("ceiling ampm-2 failed",
1284 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1285 DateUtils.ceiling(dateAmPm2, Calendar.AM_PM));
1286 assertEquals("ceiling ampm-3 failed",
1287 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
1288 DateUtils.ceiling(dateAmPm3, Calendar.AM_PM));
1289 assertEquals("ceiling ampm-4 failed",
1290 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
1291 DateUtils.ceiling(dateAmPm4, Calendar.AM_PM));
1292
1293
1294 assertEquals("ceiling year-1 failed",
1295 dateParser.parse("January 1, 2003"),
1296 DateUtils.ceiling((Object) date1, Calendar.YEAR));
1297 assertEquals("ceiling year-2 failed",
1298 dateParser.parse("January 1, 2002"),
1299 DateUtils.ceiling((Object) date2, Calendar.YEAR));
1300 assertEquals("ceiling month-1 failed",
1301 dateParser.parse("March 1, 2002"),
1302 DateUtils.ceiling((Object) date1, Calendar.MONTH));
1303 assertEquals("ceiling month-2 failed",
1304 dateParser.parse("December 1, 2001"),
1305 DateUtils.ceiling((Object) date2, Calendar.MONTH));
1306 assertEquals("ceiling semimonth-1 failed",
1307 dateParser.parse("February 16, 2002"),
1308 DateUtils.ceiling((Object) date1, DateUtils.SEMI_MONTH));
1309 assertEquals("ceiling semimonth-2 failed",
1310 dateParser.parse("December 1, 2001"),
1311 DateUtils.ceiling((Object) date2, DateUtils.SEMI_MONTH));
1312 assertEquals("ceiling date-1 failed",
1313 dateParser.parse("February 13, 2002"),
1314 DateUtils.ceiling((Object) date1, Calendar.DATE));
1315 assertEquals("ceiling date-2 failed",
1316 dateParser.parse("November 19, 2001"),
1317 DateUtils.ceiling((Object) date2, Calendar.DATE));
1318 assertEquals("ceiling hour-1 failed",
1319 dateTimeParser.parse("February 12, 2002 13:00:00.000"),
1320 DateUtils.ceiling((Object) date1, Calendar.HOUR));
1321 assertEquals("ceiling hour-2 failed",
1322 dateTimeParser.parse("November 18, 2001 2:00:00.000"),
1323 DateUtils.ceiling((Object) date2, Calendar.HOUR));
1324 assertEquals("ceiling minute-1 failed",
1325 dateTimeParser.parse("February 12, 2002 12:35:00.000"),
1326 DateUtils.ceiling((Object) date1, Calendar.MINUTE));
1327 assertEquals("ceiling minute-2 failed",
1328 dateTimeParser.parse("November 18, 2001 1:24:00.000"),
1329 DateUtils.ceiling((Object) date2, Calendar.MINUTE));
1330 assertEquals("ceiling second-1 failed",
1331 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
1332 DateUtils.ceiling((Object) date1, Calendar.SECOND));
1333 assertEquals("ceiling second-2 failed",
1334 dateTimeParser.parse("November 18, 2001 1:23:12.000"),
1335 DateUtils.ceiling((Object) date2, Calendar.SECOND));
1336 assertEquals("ceiling ampm-1 failed",
1337 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1338 DateUtils.ceiling((Object) dateAmPm1, Calendar.AM_PM));
1339 assertEquals("ceiling ampm-2 failed",
1340 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1341 DateUtils.ceiling((Object) dateAmPm2, Calendar.AM_PM));
1342 assertEquals("ceiling ampm-3 failed",
1343 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
1344 DateUtils.ceiling((Object) dateAmPm3, Calendar.AM_PM));
1345 assertEquals("ceiling ampm-4 failed",
1346 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
1347 DateUtils.ceiling((Object) dateAmPm4, Calendar.AM_PM));
1348
1349 assertEquals("ceiling calendar second-1 failed",
1350 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
1351 DateUtils.ceiling((Object) cal1, Calendar.SECOND));
1352 assertEquals("ceiling calendar second-2 failed",
1353 dateTimeParser.parse("November 18, 2001 1:23:12.000"),
1354 DateUtils.ceiling((Object) cal2, Calendar.SECOND));
1355
1356 assertEquals("ceiling ampm-1 failed",
1357 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1358 DateUtils.ceiling((Object) calAmPm1, Calendar.AM_PM));
1359 assertEquals("ceiling ampm-2 failed",
1360 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1361 DateUtils.ceiling((Object) calAmPm2, Calendar.AM_PM));
1362 assertEquals("ceiling ampm-3 failed",
1363 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
1364 DateUtils.ceiling((Object) calAmPm3, Calendar.AM_PM));
1365 assertEquals("ceiling ampm-4 failed",
1366 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
1367 DateUtils.ceiling((Object) calAmPm4, Calendar.AM_PM));
1368
1369 try {
1370 DateUtils.ceiling((Date) null, Calendar.SECOND);
1371 fail();
1372 } catch (final IllegalArgumentException ex) {}
1373 try {
1374 DateUtils.ceiling((Calendar) null, Calendar.SECOND);
1375 fail();
1376 } catch (final IllegalArgumentException ex) {}
1377 try {
1378 DateUtils.ceiling((Object) null, Calendar.SECOND);
1379 fail();
1380 } catch (final IllegalArgumentException ex) {}
1381 try {
1382 DateUtils.ceiling("", Calendar.SECOND);
1383 fail();
1384 } catch (final ClassCastException ex) {}
1385 try {
1386 DateUtils.ceiling(date1, -9999);
1387 fail();
1388 } catch(final IllegalArgumentException ex) {}
1389
1390
1391
1392
1393 TimeZone.setDefault(zone);
1394 dateTimeParser.setTimeZone(zone);
1395
1396 assertEquals("ceiling MET date across DST change-over",
1397 dateTimeParser.parse("March 31, 2003 00:00:00.000"),
1398 DateUtils.ceiling(date4, Calendar.DATE));
1399 assertEquals("ceiling MET date across DST change-over",
1400 dateTimeParser.parse("March 31, 2003 00:00:00.000"),
1401 DateUtils.ceiling((Object) cal4, Calendar.DATE));
1402 assertEquals("ceiling MET date across DST change-over",
1403 dateTimeParser.parse("March 31, 2003 00:00:00.000"),
1404 DateUtils.ceiling(date5, Calendar.DATE));
1405 assertEquals("ceiling MET date across DST change-over",
1406 dateTimeParser.parse("March 31, 2003 00:00:00.000"),
1407 DateUtils.ceiling((Object) cal5, Calendar.DATE));
1408 assertEquals("ceiling MET date across DST change-over",
1409 dateTimeParser.parse("March 31, 2003 00:00:00.000"),
1410 DateUtils.ceiling(date6, Calendar.DATE));
1411 assertEquals("ceiling MET date across DST change-over",
1412 dateTimeParser.parse("March 31, 2003 00:00:00.000"),
1413 DateUtils.ceiling((Object) cal6, Calendar.DATE));
1414 assertEquals("ceiling MET date across DST change-over",
1415 dateTimeParser.parse("March 31, 2003 00:00:00.000"),
1416 DateUtils.ceiling(date7, Calendar.DATE));
1417 assertEquals("ceiling MET date across DST change-over",
1418 dateTimeParser.parse("March 31, 2003 00:00:00.000"),
1419 DateUtils.ceiling((Object) cal7, Calendar.DATE));
1420
1421 assertEquals("ceiling MET date across DST change-over",
1422 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
1423 DateUtils.ceiling(date4, Calendar.HOUR_OF_DAY));
1424 assertEquals("ceiling MET date across DST change-over",
1425 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
1426 DateUtils.ceiling((Object) cal4, Calendar.HOUR_OF_DAY));
1427 if (SystemUtils.isJavaVersionAtLeast(JAVA_1_4)) {
1428 assertEquals("ceiling MET date across DST change-over",
1429 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
1430 DateUtils.ceiling(date5, Calendar.HOUR_OF_DAY));
1431 assertEquals("ceiling MET date across DST change-over",
1432 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
1433 DateUtils.ceiling((Object) cal5, Calendar.HOUR_OF_DAY));
1434 assertEquals("ceiling MET date across DST change-over",
1435 dateTimeParser.parse("March 30, 2003 04:00:00.000"),
1436 DateUtils.ceiling(date6, Calendar.HOUR_OF_DAY));
1437 assertEquals("ceiling MET date across DST change-over",
1438 dateTimeParser.parse("March 30, 2003 04:00:00.000"),
1439 DateUtils.ceiling((Object) cal6, Calendar.HOUR_OF_DAY));
1440 assertEquals("ceiling MET date across DST change-over",
1441 dateTimeParser.parse("March 30, 2003 04:00:00.000"),
1442 DateUtils.ceiling(date7, Calendar.HOUR_OF_DAY));
1443 assertEquals("ceiling MET date across DST change-over",
1444 dateTimeParser.parse("March 30, 2003 04:00:00.000"),
1445 DateUtils.ceiling((Object) cal7, Calendar.HOUR_OF_DAY));
1446 } else {
1447 this.warn("WARNING: Some date ceiling tests not run since the current version is " + SystemUtils.JAVA_SPECIFICATION_VERSION);
1448 }
1449 TimeZone.setDefault(defaultZone);
1450 dateTimeParser.setTimeZone(defaultZone);
1451
1452
1453 final Date endOfTime = new Date(Long.MAX_VALUE);
1454 final GregorianCalendar endCal = new GregorianCalendar();
1455 endCal.setTime(endOfTime);
1456 try {
1457 DateUtils.ceiling(endCal, Calendar.DATE);
1458 fail();
1459 } catch (final ArithmeticException ex) {}
1460 endCal.set(Calendar.YEAR, 280000001);
1461 try {
1462 DateUtils.ceiling(endCal, Calendar.DATE);
1463 fail();
1464 } catch (final ArithmeticException ex) {}
1465 endCal.set(Calendar.YEAR, 280000000);
1466 final Calendar cal = DateUtils.ceiling(endCal, Calendar.DATE);
1467 assertEquals(0, cal.get(Calendar.HOUR));
1468 }
1469
1470
1471
1472
1473 @Test
1474 public void testIteratorEx() throws Exception {
1475 try {
1476 DateUtils.iterator(Calendar.getInstance(), -9999);
1477 } catch (final IllegalArgumentException ex) {}
1478 try {
1479 DateUtils.iterator((Date) null, DateUtils.RANGE_WEEK_CENTER);
1480 fail();
1481 } catch (final IllegalArgumentException ex) {}
1482 try {
1483 DateUtils.iterator((Calendar) null, DateUtils.RANGE_WEEK_CENTER);
1484 fail();
1485 } catch (final IllegalArgumentException ex) {}
1486 try {
1487 DateUtils.iterator((Object) null, DateUtils.RANGE_WEEK_CENTER);
1488 fail();
1489 } catch (final IllegalArgumentException ex) {}
1490 try {
1491 DateUtils.iterator("", DateUtils.RANGE_WEEK_CENTER);
1492 fail();
1493 } catch (final ClassCastException ex) {}
1494 }
1495
1496
1497
1498
1499 @Test
1500 public void testWeekIterator() throws Exception {
1501 final Calendar now = Calendar.getInstance();
1502 for (int i = 0; i< 7; i++) {
1503 final Calendar today = DateUtils.truncate(now, Calendar.DATE);
1504 final Calendar sunday = DateUtils.truncate(now, Calendar.DATE);
1505 sunday.add(Calendar.DATE, 1 - sunday.get(Calendar.DAY_OF_WEEK));
1506 final Calendar monday = DateUtils.truncate(now, Calendar.DATE);
1507 if (monday.get(Calendar.DAY_OF_WEEK) == 1) {
1508
1509 monday.add(Calendar.DATE, -6);
1510 } else {
1511 monday.add(Calendar.DATE, 2 - monday.get(Calendar.DAY_OF_WEEK));
1512 }
1513 final Calendar centered = DateUtils.truncate(now, Calendar.DATE);
1514 centered.add(Calendar.DATE, -3);
1515
1516 Iterator<?> it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_SUNDAY);
1517 assertWeekIterator(it, sunday);
1518 it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_MONDAY);
1519 assertWeekIterator(it, monday);
1520 it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_RELATIVE);
1521 assertWeekIterator(it, today);
1522 it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_CENTER);
1523 assertWeekIterator(it, centered);
1524
1525 it = DateUtils.iterator((Object) now, DateUtils.RANGE_WEEK_CENTER);
1526 assertWeekIterator(it, centered);
1527 it = DateUtils.iterator((Object) now.getTime(), DateUtils.RANGE_WEEK_CENTER);
1528 assertWeekIterator(it, centered);
1529 try {
1530 it.next();
1531 fail();
1532 } catch (final NoSuchElementException ex) {}
1533 it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_CENTER);
1534 it.next();
1535 try {
1536 it.remove();
1537 } catch( final UnsupportedOperationException ex) {}
1538
1539 now.add(Calendar.DATE,1);
1540 }
1541 }
1542
1543
1544
1545
1546 @Test
1547 public void testMonthIterator() throws Exception {
1548 Iterator<?> it = DateUtils.iterator(date1, DateUtils.RANGE_MONTH_SUNDAY);
1549 assertWeekIterator(it,
1550 dateParser.parse("January 27, 2002"),
1551 dateParser.parse("March 2, 2002"));
1552
1553 it = DateUtils.iterator(date1, DateUtils.RANGE_MONTH_MONDAY);
1554 assertWeekIterator(it,
1555 dateParser.parse("January 28, 2002"),
1556 dateParser.parse("March 3, 2002"));
1557
1558 it = DateUtils.iterator(date2, DateUtils.RANGE_MONTH_SUNDAY);
1559 assertWeekIterator(it,
1560 dateParser.parse("October 28, 2001"),
1561 dateParser.parse("December 1, 2001"));
1562
1563 it = DateUtils.iterator(date2, DateUtils.RANGE_MONTH_MONDAY);
1564 assertWeekIterator(it,
1565 dateParser.parse("October 29, 2001"),
1566 dateParser.parse("December 2, 2001"));
1567 }
1568
1569 @Test
1570 public void testLANG799_EN_OK() throws ParseException {
1571 final Locale dflt = Locale.getDefault();
1572 Locale.setDefault(Locale.ENGLISH);
1573 try {
1574 DateUtils.parseDate("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
1575 DateUtils.parseDateStrictly("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
1576 } finally {
1577 Locale.setDefault(dflt);
1578 }
1579 }
1580
1581
1582 @Test(expected=ParseException.class)
1583 public void testLANG799_EN_FAIL() throws ParseException {
1584 final Locale dflt = Locale.getDefault();
1585 Locale.setDefault(Locale.ENGLISH);
1586 try {
1587 DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
1588 } finally {
1589 Locale.setDefault(dflt);
1590 }
1591 }
1592
1593 @Test
1594 public void testLANG799_DE_OK() throws ParseException {
1595 final Locale dflt = Locale.getDefault();
1596 Locale.setDefault(Locale.GERMAN);
1597 try {
1598 DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
1599 DateUtils.parseDateStrictly("Mi, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
1600 } finally {
1601 Locale.setDefault(dflt);
1602 }
1603 }
1604
1605
1606 @Test(expected=ParseException.class)
1607 public void testLANG799_DE_FAIL() throws ParseException {
1608 final Locale dflt = Locale.getDefault();
1609 Locale.setDefault(Locale.GERMAN);
1610 try {
1611 DateUtils.parseDate("Wed, 09 Apr 2008 23:55:38 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz");
1612 } finally {
1613 Locale.setDefault(dflt);
1614 }
1615 }
1616
1617
1618 @Test
1619 public void testLANG799_EN_WITH_DE_LOCALE() throws ParseException {
1620 final Locale dflt = Locale.getDefault();
1621 Locale.setDefault(Locale.ENGLISH);
1622 try {
1623 DateUtils.parseDate("Mi, 09 Apr 2008 23:55:38 GMT", Locale.GERMAN, "EEE, dd MMM yyyy HH:mm:ss zzz");
1624 } finally {
1625 Locale.setDefault(dflt);
1626 }
1627 }
1628
1629
1630
1631
1632
1633 private static void assertWeekIterator(final Iterator<?> it, final Calendar start) {
1634 final Calendar end = (Calendar) start.clone();
1635 end.add(Calendar.DATE, 6);
1636
1637 assertWeekIterator(it, start, end);
1638 }
1639
1640
1641
1642
1643 private static void assertWeekIterator(final Iterator<?> it, final Date start, final Date end) {
1644 final Calendar calStart = Calendar.getInstance();
1645 calStart.setTime(start);
1646 final Calendar calEnd = Calendar.getInstance();
1647 calEnd.setTime(end);
1648
1649 assertWeekIterator(it, calStart, calEnd);
1650 }
1651
1652
1653
1654
1655
1656
1657 private static void assertWeekIterator(final Iterator<?> it, final Calendar start, final Calendar end) {
1658 Calendar cal = (Calendar) it.next();
1659 assertCalendarsEquals("", start, cal, 0);
1660 Calendar last = null;
1661 int count = 1;
1662 while (it.hasNext()) {
1663
1664 assertCalendarsEquals("", cal, DateUtils.truncate(cal, Calendar.DATE), 0);
1665
1666 last = cal;
1667 cal = (Calendar) it.next();
1668 count++;
1669
1670
1671 last.add(Calendar.DATE, 1);
1672 assertCalendarsEquals("", last, cal, 0);
1673 }
1674 if (count % 7 != 0) {
1675 throw new AssertionFailedError("There were " + count + " days in this iterator");
1676 }
1677 assertCalendarsEquals("", end, cal, 0);
1678 }
1679
1680
1681
1682
1683
1684 private static void assertCalendarsEquals(final String message, final Calendar cal1, final Calendar cal2, final long delta) {
1685 if (Math.abs(cal1.getTime().getTime() - cal2.getTime().getTime()) > delta) {
1686 throw new AssertionFailedError(
1687 message + " expected " + cal1.getTime() + " but got " + cal2.getTime());
1688 }
1689 }
1690
1691 void warn(final String msg) {
1692 System.err.println(msg);
1693 }
1694 }
1695