1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.lang.time;
18
19 import java.lang.reflect.Constructor;
20 import java.lang.reflect.Modifier;
21 import java.text.DateFormat;
22 import java.text.ParseException;
23 import java.text.SimpleDateFormat;
24 import java.util.Calendar;
25 import java.util.Date;
26 import java.util.GregorianCalendar;
27 import java.util.Iterator;
28 import java.util.Locale;
29 import java.util.NoSuchElementException;
30 import java.util.TimeZone;
31
32 import junit.framework.AssertionFailedError;
33 import junit.framework.Test;
34 import junit.framework.TestCase;
35 import junit.framework.TestSuite;
36 import junit.textui.TestRunner;
37
38 import org.apache.commons.lang.SystemUtils;
39
40
41
42
43
44
45
46 public class DateUtilsTest extends TestCase {
47
48 private static final long MILLIS_TEST;
49 static {
50 GregorianCalendar cal = new GregorianCalendar(2000, 6, 5, 4, 3, 2);
51 cal.set(Calendar.MILLISECOND, 1);
52 MILLIS_TEST = cal.getTime().getTime();
53 }
54
55 DateFormat dateParser = null;
56 DateFormat dateTimeParser = null;
57 DateFormat timeZoneDateParser = null;
58 Date dateAmPm1 = null;
59 Date dateAmPm2 = null;
60 Date dateAmPm3 = null;
61 Date dateAmPm4 = null;
62 Date date0 = null;
63 Date date1 = null;
64 Date date2 = null;
65 Date date3 = null;
66 Date date4 = null;
67 Date date5 = null;
68 Date date6 = null;
69 Date date7 = null;
70 Date date8 = null;
71 Calendar calAmPm1 = null;
72 Calendar calAmPm2 = null;
73 Calendar calAmPm3 = null;
74 Calendar calAmPm4 = null;
75 Calendar cal1 = null;
76 Calendar cal2 = null;
77 Calendar cal3 = null;
78 Calendar cal4 = null;
79 Calendar cal5 = null;
80 Calendar cal6 = null;
81 Calendar cal7 = null;
82 Calendar cal8 = null;
83 TimeZone zone = null;
84 TimeZone defaultZone = null;
85
86 public DateUtilsTest(String name) {
87 super(name);
88 }
89
90 public static void main(String[] args) {
91 TestRunner.run(suite());
92 }
93
94 public static Test suite() {
95 TestSuite suite = new TestSuite(DateUtilsTest.class);
96 suite.setName("DateUtils Tests");
97 return suite;
98 }
99
100 protected void setUp() throws Exception {
101 super.setUp();
102
103 dateParser = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
104 dateTimeParser = new SimpleDateFormat("MMM dd, yyyy H:mm:ss.SSS", Locale.ENGLISH);
105
106 dateAmPm1 = dateTimeParser.parse("February 3, 2002 01:10:00.000");
107 dateAmPm2 = dateTimeParser.parse("February 3, 2002 11:10:00.000");
108 dateAmPm3 = dateTimeParser.parse("February 3, 2002 13:10:00.000");
109 dateAmPm4 = dateTimeParser.parse("February 3, 2002 19:10:00.000");
110 date0 = dateTimeParser.parse("February 3, 2002 12:34:56.789");
111 date1 = dateTimeParser.parse("February 12, 2002 12:34:56.789");
112 date2 = dateTimeParser.parse("November 18, 2001 1:23:11.321");
113 defaultZone = TimeZone.getDefault();
114 zone = TimeZone.getTimeZone("MET");
115 TimeZone.setDefault(zone);
116 dateTimeParser.setTimeZone(zone);
117 date3 = dateTimeParser.parse("March 30, 2003 05:30:45.000");
118 date4 = dateTimeParser.parse("March 30, 2003 01:10:00.000");
119 date5 = dateTimeParser.parse("March 30, 2003 01:40:00.000");
120 date6 = dateTimeParser.parse("March 30, 2003 02:10:00.000");
121 date7 = dateTimeParser.parse("March 30, 2003 02:40:00.000");
122 date8 = dateTimeParser.parse("October 26, 2003 05:30:45.000");
123 dateTimeParser.setTimeZone(defaultZone);
124 TimeZone.setDefault(defaultZone);
125 calAmPm1 = Calendar.getInstance();
126 calAmPm1.setTime(dateAmPm1);
127 calAmPm2 = Calendar.getInstance();
128 calAmPm2.setTime(dateAmPm2);
129 calAmPm3 = Calendar.getInstance();
130 calAmPm3.setTime(dateAmPm3);
131 calAmPm4 = Calendar.getInstance();
132 calAmPm4.setTime(dateAmPm4);
133 cal1 = Calendar.getInstance();
134 cal1.setTime(date1);
135 cal2 = Calendar.getInstance();
136 cal2.setTime(date2);
137 TimeZone.setDefault(zone);
138 cal3 = Calendar.getInstance();
139 cal3.setTime(date3);
140 cal4 = Calendar.getInstance();
141 cal4.setTime(date4);
142 cal5 = Calendar.getInstance();
143 cal5.setTime(date5);
144 cal6 = Calendar.getInstance();
145 cal6.setTime(date6);
146 cal7 = Calendar.getInstance();
147 cal7.setTime(date7);
148 cal8 = Calendar.getInstance();
149 cal8.setTime(date8);
150 TimeZone.setDefault(defaultZone);
151 }
152
153 protected void tearDown() throws Exception {
154 super.tearDown();
155 }
156
157
158 public void testConstructor() {
159 assertNotNull(new DateUtils());
160 Constructor[] cons = DateUtils.class.getDeclaredConstructors();
161 assertEquals(1, cons.length);
162 assertEquals(true, Modifier.isPublic(cons[0].getModifiers()));
163 assertEquals(true, Modifier.isPublic(DateUtils.class.getModifiers()));
164 assertEquals(false, Modifier.isFinal(DateUtils.class.getModifiers()));
165 }
166
167
168 public void testIsSameDay_Date() {
169 Date date1 = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
170 Date date2 = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
171 assertEquals(true, DateUtils.isSameDay(date1, date2));
172 date2 = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
173 assertEquals(false, DateUtils.isSameDay(date1, date2));
174 date1 = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
175 assertEquals(true, DateUtils.isSameDay(date1, date2));
176 date2 = new GregorianCalendar(2005, 6, 10, 13, 45).getTime();
177 assertEquals(false, DateUtils.isSameDay(date1, date2));
178 try {
179 DateUtils.isSameDay((Date) null, (Date) null);
180 fail();
181 } catch (IllegalArgumentException ex) {}
182 }
183
184
185 public void testIsSameDay_Cal() {
186 GregorianCalendar cal1 = new GregorianCalendar(2004, 6, 9, 13, 45);
187 GregorianCalendar cal2 = new GregorianCalendar(2004, 6, 9, 13, 45);
188 assertEquals(true, DateUtils.isSameDay(cal1, cal2));
189 cal2.add(Calendar.DAY_OF_YEAR, 1);
190 assertEquals(false, DateUtils.isSameDay(cal1, cal2));
191 cal1.add(Calendar.DAY_OF_YEAR, 1);
192 assertEquals(true, DateUtils.isSameDay(cal1, cal2));
193 cal2.add(Calendar.YEAR, 1);
194 assertEquals(false, DateUtils.isSameDay(cal1, cal2));
195 try {
196 DateUtils.isSameDay((Calendar) null, (Calendar) null);
197 fail();
198 } catch (IllegalArgumentException ex) {}
199 }
200
201
202 public void testIsSameInstant_Date() {
203 Date date1 = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
204 Date date2 = new GregorianCalendar(2004, 6, 9, 13, 45).getTime();
205 assertEquals(true, DateUtils.isSameInstant(date1, date2));
206 date2 = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
207 assertEquals(false, DateUtils.isSameInstant(date1, date2));
208 date1 = new GregorianCalendar(2004, 6, 10, 13, 45).getTime();
209 assertEquals(true, DateUtils.isSameInstant(date1, date2));
210 date2 = new GregorianCalendar(2005, 6, 10, 13, 45).getTime();
211 assertEquals(false, DateUtils.isSameInstant(date1, date2));
212 try {
213 DateUtils.isSameInstant((Date) null, (Date) null);
214 fail();
215 } catch (IllegalArgumentException ex) {}
216 }
217
218
219 public void testIsSameInstant_Cal() {
220 GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT+1"));
221 GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT-1"));
222 cal1.set(2004, 6, 9, 13, 45, 0);
223 cal1.set(Calendar.MILLISECOND, 0);
224 cal2.set(2004, 6, 9, 13, 45, 0);
225 cal2.set(Calendar.MILLISECOND, 0);
226 assertEquals(false, DateUtils.isSameInstant(cal1, cal2));
227
228 cal2.set(2004, 6, 9, 11, 45, 0);
229 assertEquals(true, DateUtils.isSameInstant(cal1, cal2));
230 try {
231 DateUtils.isSameInstant((Calendar) null, (Calendar) null);
232 fail();
233 } catch (IllegalArgumentException ex) {}
234 }
235
236
237 public void testIsSameLocalTime_Cal() {
238 GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT+1"));
239 GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT-1"));
240 cal1.set(2004, 6, 9, 13, 45, 0);
241 cal1.set(Calendar.MILLISECOND, 0);
242 cal2.set(2004, 6, 9, 13, 45, 0);
243 cal2.set(Calendar.MILLISECOND, 0);
244 assertEquals(true, DateUtils.isSameLocalTime(cal1, cal2));
245
246 cal2.set(2004, 6, 9, 11, 45, 0);
247 assertEquals(false, DateUtils.isSameLocalTime(cal1, cal2));
248 try {
249 DateUtils.isSameLocalTime((Calendar) null, (Calendar) null);
250 fail();
251 } catch (IllegalArgumentException ex) {}
252 }
253
254
255 public void testParseDate() throws Exception {
256 GregorianCalendar cal = new GregorianCalendar(1972, 11, 3);
257 String dateStr = "1972-12-03";
258 String[] parsers = new String[] {"yyyy'-'DDD", "yyyy'-'MM'-'dd", "yyyyMMdd"};
259 Date date = DateUtils.parseDate(dateStr, parsers);
260 assertEquals(cal.getTime(), date);
261
262 dateStr = "1972-338";
263 date = DateUtils.parseDate(dateStr, parsers);
264 assertEquals(cal.getTime(), date);
265
266 dateStr = "19721203";
267 date = DateUtils.parseDate(dateStr, parsers);
268 assertEquals(cal.getTime(), date);
269
270 try {
271 DateUtils.parseDate("PURPLE", parsers);
272 fail();
273 } catch (ParseException ex) {}
274 try {
275 DateUtils.parseDate("197212AB", parsers);
276 fail();
277 } catch (ParseException ex) {}
278 try {
279 DateUtils.parseDate(null, parsers);
280 fail();
281 } catch (IllegalArgumentException ex) {}
282 try {
283 DateUtils.parseDate(dateStr, null);
284 fail();
285 } catch (IllegalArgumentException ex) {}
286 }
287
288
289 public void testAddYears() throws Exception {
290 Date base = new Date(MILLIS_TEST);
291 Date result = DateUtils.addYears(base, 0);
292 assertNotSame(base, result);
293 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
294 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
295
296 result = DateUtils.addYears(base, 1);
297 assertNotSame(base, result);
298 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
299 assertDate(result, 2001, 6, 5, 4, 3, 2, 1);
300
301 result = DateUtils.addYears(base, -1);
302 assertNotSame(base, result);
303 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
304 assertDate(result, 1999, 6, 5, 4, 3, 2, 1);
305 }
306
307
308 public void testAddMonths() throws Exception {
309 Date base = new Date(MILLIS_TEST);
310 Date result = DateUtils.addMonths(base, 0);
311 assertNotSame(base, result);
312 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
313 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
314
315 result = DateUtils.addMonths(base, 1);
316 assertNotSame(base, result);
317 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
318 assertDate(result, 2000, 7, 5, 4, 3, 2, 1);
319
320 result = DateUtils.addMonths(base, -1);
321 assertNotSame(base, result);
322 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
323 assertDate(result, 2000, 5, 5, 4, 3, 2, 1);
324 }
325
326
327 public void testAddWeeks() throws Exception {
328 Date base = new Date(MILLIS_TEST);
329 Date result = DateUtils.addWeeks(base, 0);
330 assertNotSame(base, result);
331 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
332 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
333
334 result = DateUtils.addWeeks(base, 1);
335 assertNotSame(base, result);
336 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
337 assertDate(result, 2000, 6, 12, 4, 3, 2, 1);
338
339 result = DateUtils.addWeeks(base, -1);
340 assertNotSame(base, result);
341 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
342 assertDate(result, 2000, 5, 28, 4, 3, 2, 1);
343 }
344
345
346 public void testAddDays() throws Exception {
347 Date base = new Date(MILLIS_TEST);
348 Date result = DateUtils.addDays(base, 0);
349 assertNotSame(base, result);
350 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
351 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
352
353 result = DateUtils.addDays(base, 1);
354 assertNotSame(base, result);
355 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
356 assertDate(result, 2000, 6, 6, 4, 3, 2, 1);
357
358 result = DateUtils.addDays(base, -1);
359 assertNotSame(base, result);
360 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
361 assertDate(result, 2000, 6, 4, 4, 3, 2, 1);
362 }
363
364
365 public void testAddHours() throws Exception {
366 Date base = new Date(MILLIS_TEST);
367 Date result = DateUtils.addHours(base, 0);
368 assertNotSame(base, result);
369 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
370 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
371
372 result = DateUtils.addHours(base, 1);
373 assertNotSame(base, result);
374 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
375 assertDate(result, 2000, 6, 5, 5, 3, 2, 1);
376
377 result = DateUtils.addHours(base, -1);
378 assertNotSame(base, result);
379 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
380 assertDate(result, 2000, 6, 5, 3, 3, 2, 1);
381 }
382
383
384 public void testAddMinutes() throws Exception {
385 Date base = new Date(MILLIS_TEST);
386 Date result = DateUtils.addMinutes(base, 0);
387 assertNotSame(base, result);
388 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
389 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
390
391 result = DateUtils.addMinutes(base, 1);
392 assertNotSame(base, result);
393 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
394 assertDate(result, 2000, 6, 5, 4, 4, 2, 1);
395
396 result = DateUtils.addMinutes(base, -1);
397 assertNotSame(base, result);
398 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
399 assertDate(result, 2000, 6, 5, 4, 2, 2, 1);
400 }
401
402
403 public void testAddSeconds() throws Exception {
404 Date base = new Date(MILLIS_TEST);
405 Date result = DateUtils.addSeconds(base, 0);
406 assertNotSame(base, result);
407 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
408 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
409
410 result = DateUtils.addSeconds(base, 1);
411 assertNotSame(base, result);
412 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
413 assertDate(result, 2000, 6, 5, 4, 3, 3, 1);
414
415 result = DateUtils.addSeconds(base, -1);
416 assertNotSame(base, result);
417 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
418 assertDate(result, 2000, 6, 5, 4, 3, 1, 1);
419 }
420
421
422 public void testAddMilliseconds() throws Exception {
423 Date base = new Date(MILLIS_TEST);
424 Date result = DateUtils.addMilliseconds(base, 0);
425 assertNotSame(base, result);
426 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
427 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
428
429 result = DateUtils.addMilliseconds(base, 1);
430 assertNotSame(base, result);
431 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
432 assertDate(result, 2000, 6, 5, 4, 3, 2, 2);
433
434 result = DateUtils.addMilliseconds(base, -1);
435 assertNotSame(base, result);
436 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
437 assertDate(result, 2000, 6, 5, 4, 3, 2, 0);
438 }
439
440
441 public void testAddByField() throws Exception {
442 Date base = new Date(MILLIS_TEST);
443 Date result = DateUtils.add(base, Calendar.YEAR, 0);
444 assertNotSame(base, result);
445 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
446 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
447
448 result = DateUtils.add(base, Calendar.YEAR, 1);
449 assertNotSame(base, result);
450 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
451 assertDate(result, 2001, 6, 5, 4, 3, 2, 1);
452
453 result = DateUtils.add(base, Calendar.YEAR, -1);
454 assertNotSame(base, result);
455 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
456 assertDate(result, 1999, 6, 5, 4, 3, 2, 1);
457 }
458
459
460 public void testSetYears() throws Exception {
461 Date base = new Date(MILLIS_TEST);
462 Date result = DateUtils.setYears(base, 2000);
463 assertNotSame(base, result);
464 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
465 assertDate(result, 2000, 6, 5, 4, 3, 2, 1);
466
467 result = DateUtils.setYears(base, 2008);
468 assertNotSame(base, result);
469 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
470 assertDate(result, 2008, 6, 5, 4, 3, 2, 1);
471
472 result = DateUtils.setYears(base, 2005);
473 assertNotSame(base, result);
474 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
475 assertDate(result, 2005, 6, 5, 4, 3, 2, 1);
476 }
477
478
479 public void testSetMonths() throws Exception {
480 Date base = new Date(MILLIS_TEST);
481 Date result = DateUtils.setMonths(base, 5);
482 assertNotSame(base, result);
483 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
484 assertDate(result, 2000, 5, 5, 4, 3, 2, 1);
485
486 result = DateUtils.setMonths(base, 1);
487 assertNotSame(base, result);
488 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
489 assertDate(result, 2000, 1, 5, 4, 3, 2, 1);
490
491 try {
492 result = DateUtils.setMonths(base, 12);
493 fail("DateUtils.setMonths did not throw an expected IllegalArguementException.");
494 } catch (IllegalArgumentException e) {
495
496 }
497 }
498
499
500 public void testSetDays() throws Exception {
501 Date base = new Date(MILLIS_TEST);
502 Date result = DateUtils.setDays(base, 1);
503 assertNotSame(base, result);
504 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
505 assertDate(result, 2000, 6, 1, 4, 3, 2, 1);
506
507 result = DateUtils.setDays(base, 29);
508 assertNotSame(base, result);
509 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
510 assertDate(result, 2000, 6, 29, 4, 3, 2, 1);
511
512 try {
513 result = DateUtils.setDays(base, 32);
514 fail("DateUtils.setDays did not throw an expected IllegalArguementException.");
515 } catch (IllegalArgumentException e) {
516
517 }
518 }
519
520
521 public void testSetHours() throws Exception {
522 Date base = new Date(MILLIS_TEST);
523 Date result = DateUtils.setHours(base, 0);
524 assertNotSame(base, result);
525 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
526 assertDate(result, 2000, 6, 5, 0, 3, 2, 1);
527
528 result = DateUtils.setHours(base, 23);
529 assertNotSame(base, result);
530 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
531 assertDate(result, 2000, 6, 5, 23, 3, 2, 1);
532
533 try {
534 result = DateUtils.setHours(base, 24);
535 fail("DateUtils.setHours did not throw an expected IllegalArguementException.");
536 } catch (IllegalArgumentException e) {
537
538 }
539 }
540
541
542 public void testSetMinutes() throws Exception {
543 Date base = new Date(MILLIS_TEST);
544 Date result = DateUtils.setMinutes(base, 0);
545 assertNotSame(base, result);
546 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
547 assertDate(result, 2000, 6, 5, 4, 0, 2, 1);
548
549 result = DateUtils.setMinutes(base, 59);
550 assertNotSame(base, result);
551 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
552 assertDate(result, 2000, 6, 5, 4, 59, 2, 1);
553
554 try {
555 result = DateUtils.setMinutes(base, 60);
556 fail("DateUtils.setMinutes did not throw an expected IllegalArguementException.");
557 } catch (IllegalArgumentException e) {
558
559 }
560 }
561
562
563 public void testSetSeconds() throws Exception {
564 Date base = new Date(MILLIS_TEST);
565 Date result = DateUtils.setSeconds(base, 0);
566 assertNotSame(base, result);
567 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
568 assertDate(result, 2000, 6, 5, 4, 3, 0, 1);
569
570 result = DateUtils.setSeconds(base, 59);
571 assertNotSame(base, result);
572 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
573 assertDate(result, 2000, 6, 5, 4, 3, 59, 1);
574
575 try {
576 result = DateUtils.setSeconds(base, 60);
577 fail("DateUtils.setSeconds did not throw an expected IllegalArguementException.");
578 } catch (IllegalArgumentException e) {
579
580 }
581 }
582
583
584 public void testSetMilliseconds() throws Exception {
585 Date base = new Date(MILLIS_TEST);
586 Date result = DateUtils.setMilliseconds(base, 0);
587 assertNotSame(base, result);
588 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
589 assertDate(result, 2000, 6, 5, 4, 3, 2, 0);
590
591 result = DateUtils.setMilliseconds(base, 999);
592 assertNotSame(base, result);
593 assertDate(base, 2000, 6, 5, 4, 3, 2, 1);
594 assertDate(result, 2000, 6, 5, 4, 3, 2, 999);
595
596 try {
597 result = DateUtils.setMilliseconds(base, 1000);
598 fail("DateUtils.setMilliseconds did not throw an expected IllegalArguementException.");
599 } catch (IllegalArgumentException e) {
600
601 }
602 }
603
604
605 private void assertDate(Date date, int year, int month, int day, int hour, int min, int sec, int mil) throws Exception {
606 GregorianCalendar cal = new GregorianCalendar();
607 cal.setTime(date);
608 assertEquals(year, cal.get(Calendar.YEAR));
609 assertEquals(month, cal.get(Calendar.MONTH));
610 assertEquals(day, cal.get(Calendar.DAY_OF_MONTH));
611 assertEquals(hour, cal.get(Calendar.HOUR_OF_DAY));
612 assertEquals(min, cal.get(Calendar.MINUTE));
613 assertEquals(sec, cal.get(Calendar.SECOND));
614 assertEquals(mil, cal.get(Calendar.MILLISECOND));
615 }
616
617
618
619
620
621 public void testRound() throws Exception {
622
623 assertEquals("round year-1 failed",
624 dateParser.parse("January 1, 2002"),
625 DateUtils.round(date1, Calendar.YEAR));
626 assertEquals("round year-2 failed",
627 dateParser.parse("January 1, 2002"),
628 DateUtils.round(date2, Calendar.YEAR));
629 assertEquals("round month-1 failed",
630 dateParser.parse("February 1, 2002"),
631 DateUtils.round(date1, Calendar.MONTH));
632 assertEquals("round month-2 failed",
633 dateParser.parse("December 1, 2001"),
634 DateUtils.round(date2, Calendar.MONTH));
635 assertEquals("round semimonth-0 failed",
636 dateParser.parse("February 1, 2002"),
637 DateUtils.round(date0, DateUtils.SEMI_MONTH));
638 assertEquals("round semimonth-1 failed",
639 dateParser.parse("February 16, 2002"),
640 DateUtils.round(date1, DateUtils.SEMI_MONTH));
641 assertEquals("round semimonth-2 failed",
642 dateParser.parse("November 16, 2001"),
643 DateUtils.round(date2, DateUtils.SEMI_MONTH));
644
645
646 assertEquals("round date-1 failed",
647 dateParser.parse("February 13, 2002"),
648 DateUtils.round(date1, Calendar.DATE));
649 assertEquals("round date-2 failed",
650 dateParser.parse("November 18, 2001"),
651 DateUtils.round(date2, Calendar.DATE));
652 assertEquals("round hour-1 failed",
653 dateTimeParser.parse("February 12, 2002 13:00:00.000"),
654 DateUtils.round(date1, Calendar.HOUR));
655 assertEquals("round hour-2 failed",
656 dateTimeParser.parse("November 18, 2001 1:00:00.000"),
657 DateUtils.round(date2, Calendar.HOUR));
658 assertEquals("round minute-1 failed",
659 dateTimeParser.parse("February 12, 2002 12:35:00.000"),
660 DateUtils.round(date1, Calendar.MINUTE));
661 assertEquals("round minute-2 failed",
662 dateTimeParser.parse("November 18, 2001 1:23:00.000"),
663 DateUtils.round(date2, Calendar.MINUTE));
664 assertEquals("round second-1 failed",
665 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
666 DateUtils.round(date1, Calendar.SECOND));
667 assertEquals("round second-2 failed",
668 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
669 DateUtils.round(date2, Calendar.SECOND));
670 assertEquals("truncate ampm-1 failed",
671 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
672 DateUtils.round(dateAmPm1, Calendar.AM_PM));
673 assertEquals("truncate ampm-2 failed",
674 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
675 DateUtils.round(dateAmPm2, Calendar.AM_PM));
676 assertEquals("truncate ampm-3 failed",
677 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
678 DateUtils.round(dateAmPm3, Calendar.AM_PM));
679 assertEquals("truncate ampm-4 failed",
680 dateTimeParser.parse("February 4, 2002 12:00:00.000"),
681 DateUtils.round(dateAmPm4, Calendar.AM_PM));
682
683
684 assertEquals("round year-1 failed",
685 dateParser.parse("January 1, 2002"),
686 DateUtils.round((Object) date1, Calendar.YEAR));
687 assertEquals("round year-2 failed",
688 dateParser.parse("January 1, 2002"),
689 DateUtils.round((Object) date2, Calendar.YEAR));
690 assertEquals("round month-1 failed",
691 dateParser.parse("February 1, 2002"),
692 DateUtils.round((Object) date1, Calendar.MONTH));
693 assertEquals("round month-2 failed",
694 dateParser.parse("December 1, 2001"),
695 DateUtils.round((Object) date2, Calendar.MONTH));
696 assertEquals("round semimonth-1 failed",
697 dateParser.parse("February 16, 2002"),
698 DateUtils.round((Object) date1, DateUtils.SEMI_MONTH));
699 assertEquals("round semimonth-2 failed",
700 dateParser.parse("November 16, 2001"),
701 DateUtils.round((Object) date2, DateUtils.SEMI_MONTH));
702 assertEquals("round date-1 failed",
703 dateParser.parse("February 13, 2002"),
704 DateUtils.round((Object) date1, Calendar.DATE));
705 assertEquals("round date-2 failed",
706 dateParser.parse("November 18, 2001"),
707 DateUtils.round((Object) date2, Calendar.DATE));
708 assertEquals("round hour-1 failed",
709 dateTimeParser.parse("February 12, 2002 13:00:00.000"),
710 DateUtils.round((Object) date1, Calendar.HOUR));
711 assertEquals("round hour-2 failed",
712 dateTimeParser.parse("November 18, 2001 1:00:00.000"),
713 DateUtils.round((Object) date2, Calendar.HOUR));
714 assertEquals("round minute-1 failed",
715 dateTimeParser.parse("February 12, 2002 12:35:00.000"),
716 DateUtils.round((Object) date1, Calendar.MINUTE));
717 assertEquals("round minute-2 failed",
718 dateTimeParser.parse("November 18, 2001 1:23:00.000"),
719 DateUtils.round((Object) date2, Calendar.MINUTE));
720 assertEquals("round second-1 failed",
721 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
722 DateUtils.round((Object) date1, Calendar.SECOND));
723 assertEquals("round second-2 failed",
724 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
725 DateUtils.round((Object) date2, Calendar.SECOND));
726 assertEquals("round calendar second-1 failed",
727 dateTimeParser.parse("February 12, 2002 12:34:57.000"),
728 DateUtils.round((Object) cal1, Calendar.SECOND));
729 assertEquals("round calendar second-2 failed",
730 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
731 DateUtils.round((Object) cal2, Calendar.SECOND));
732 assertEquals("truncate ampm-1 failed",
733 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
734 DateUtils.round((Object) dateAmPm1, Calendar.AM_PM));
735 assertEquals("truncate ampm-2 failed",
736 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
737 DateUtils.round((Object) dateAmPm2, Calendar.AM_PM));
738 assertEquals("truncate ampm-3 failed",
739 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
740 DateUtils.round((Object) dateAmPm3, Calendar.AM_PM));
741 assertEquals("truncate ampm-4 failed",
742 dateTimeParser.parse("February 4, 2002 12:00:00.000"),
743 DateUtils.round((Object) dateAmPm4, Calendar.AM_PM));
744
745 try {
746 DateUtils.round((Date) null, Calendar.SECOND);
747 fail();
748 } catch (IllegalArgumentException ex) {}
749 try {
750 DateUtils.round((Calendar) null, Calendar.SECOND);
751 fail();
752 } catch (IllegalArgumentException ex) {}
753 try {
754 DateUtils.round((Object) null, Calendar.SECOND);
755 fail();
756 } catch (IllegalArgumentException ex) {}
757 try {
758 DateUtils.round("", Calendar.SECOND);
759 fail();
760 } catch (ClassCastException ex) {}
761 try {
762 DateUtils.round(date1, -9999);
763 fail();
764 } catch(IllegalArgumentException ex) {}
765
766 assertEquals("truncate ampm-1 failed",
767 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
768 DateUtils.round((Object) calAmPm1, Calendar.AM_PM));
769 assertEquals("truncate ampm-2 failed",
770 dateTimeParser.parse("February 4, 2002 00:00:00.000"),
771 DateUtils.round((Object) calAmPm2, Calendar.AM_PM));
772 assertEquals("truncate ampm-3 failed",
773 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
774 DateUtils.round((Object) calAmPm3, Calendar.AM_PM));
775 assertEquals("truncate ampm-4 failed",
776 dateTimeParser.parse("February 4, 2002 12:00:00.000"),
777 DateUtils.round((Object) calAmPm4, Calendar.AM_PM));
778
779
780
781 TimeZone.setDefault(zone);
782 dateTimeParser.setTimeZone(zone);
783 assertEquals("round MET date across DST change-over",
784 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
785 DateUtils.round(date4, Calendar.DATE));
786 assertEquals("round MET date across DST change-over",
787 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
788 DateUtils.round((Object) cal4, Calendar.DATE));
789 assertEquals("round MET date across DST change-over",
790 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
791 DateUtils.round(date5, Calendar.DATE));
792 assertEquals("round MET date across DST change-over",
793 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
794 DateUtils.round((Object) cal5, Calendar.DATE));
795 assertEquals("round MET date across DST change-over",
796 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
797 DateUtils.round(date6, Calendar.DATE));
798 assertEquals("round MET date across DST change-over",
799 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
800 DateUtils.round((Object) cal6, Calendar.DATE));
801 assertEquals("round MET date across DST change-over",
802 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
803 DateUtils.round(date7, Calendar.DATE));
804 assertEquals("round MET date across DST change-over",
805 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
806 DateUtils.round((Object) cal7, Calendar.DATE));
807
808 assertEquals("round MET date across DST change-over",
809 dateTimeParser.parse("March 30, 2003 01:00:00.000"),
810 DateUtils.round(date4, Calendar.HOUR_OF_DAY));
811 assertEquals("round MET date across DST change-over",
812 dateTimeParser.parse("March 30, 2003 01:00:00.000"),
813 DateUtils.round((Object) cal4, Calendar.HOUR_OF_DAY));
814 if (SystemUtils.isJavaVersionAtLeast(1.4f)) {
815 assertEquals("round MET date across DST change-over",
816 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
817 DateUtils.round(date5, Calendar.HOUR_OF_DAY));
818 assertEquals("round MET date across DST change-over",
819 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
820 DateUtils.round((Object) cal5, Calendar.HOUR_OF_DAY));
821 assertEquals("round MET date across DST change-over",
822 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
823 DateUtils.round(date6, Calendar.HOUR_OF_DAY));
824 assertEquals("round MET date across DST change-over",
825 dateTimeParser.parse("March 30, 2003 03:00:00.000"),
826 DateUtils.round((Object) cal6, Calendar.HOUR_OF_DAY));
827 assertEquals("round MET date across DST change-over",
828 dateTimeParser.parse("March 30, 2003 04:00:00.000"),
829 DateUtils.round(date7, Calendar.HOUR_OF_DAY));
830 assertEquals("round MET date across DST change-over",
831 dateTimeParser.parse("March 30, 2003 04:00:00.000"),
832 DateUtils.round((Object) cal7, Calendar.HOUR_OF_DAY));
833 } else {
834 this.warn("WARNING: Some date rounding tests not run since the current version is " + SystemUtils.JAVA_VERSION);
835 }
836 TimeZone.setDefault(defaultZone);
837 dateTimeParser.setTimeZone(defaultZone);
838 }
839
840
841
842
843
844 public void testRoundLang346() throws Exception
845 {
846 TimeZone.setDefault(defaultZone);
847 dateTimeParser.setTimeZone(defaultZone);
848 Calendar testCalendar = Calendar.getInstance();
849 testCalendar.set(2007, 6, 2, 8, 8, 50);
850 Date date = testCalendar.getTime();
851 assertEquals("Minute Round Up Failed",
852 dateTimeParser.parse("July 2, 2007 08:09:00.000"),
853 DateUtils.round(date, Calendar.MINUTE));
854
855 testCalendar.set(2007, 6, 2, 8, 8, 20);
856 date = testCalendar.getTime();
857 assertEquals("Minute No Round Failed",
858 dateTimeParser.parse("July 2, 2007 08:08:00.000"),
859 DateUtils.round(date, Calendar.MINUTE));
860
861 testCalendar.set(2007, 6, 2, 8, 8, 50);
862 testCalendar.set(Calendar.MILLISECOND, 600);
863 date = testCalendar.getTime();
864
865 assertEquals("Second Round Up with 600 Milli Seconds Failed",
866 dateTimeParser.parse("July 2, 2007 08:08:51.000"),
867 DateUtils.round(date, Calendar.SECOND));
868
869 testCalendar.set(2007, 6, 2, 8, 8, 50);
870 testCalendar.set(Calendar.MILLISECOND, 200);
871 date = testCalendar.getTime();
872 assertEquals("Second Round Down with 200 Milli Seconds Failed",
873 dateTimeParser.parse("July 2, 2007 08:08:50.000"),
874 DateUtils.round(date, Calendar.SECOND));
875
876 testCalendar.set(2007, 6, 2, 8, 8, 20);
877 testCalendar.set(Calendar.MILLISECOND, 600);
878 date = testCalendar.getTime();
879 assertEquals("Second Round Up with 200 Milli Seconds Failed",
880 dateTimeParser.parse("July 2, 2007 08:08:21.000"),
881 DateUtils.round(date, Calendar.SECOND));
882
883 testCalendar.set(2007, 6, 2, 8, 8, 20);
884 testCalendar.set(Calendar.MILLISECOND, 200);
885 date = testCalendar.getTime();
886 assertEquals("Second Round Down with 200 Milli Seconds Failed",
887 dateTimeParser.parse("July 2, 2007 08:08:20.000"),
888 DateUtils.round(date, Calendar.SECOND));
889
890 testCalendar.set(2007, 6, 2, 8, 8, 50);
891 date = testCalendar.getTime();
892 assertEquals("Hour Round Down Failed",
893 dateTimeParser.parse("July 2, 2007 08:00:00.000"),
894 DateUtils.round(date, Calendar.HOUR));
895
896 testCalendar.set(2007, 6, 2, 8, 31, 50);
897 date = testCalendar.getTime();
898 assertEquals("Hour Round Up Failed",
899 dateTimeParser.parse("July 2, 2007 09:00:00.000"),
900 DateUtils.round(date, Calendar.HOUR));
901 }
902
903
904
905
906 public void testTruncate() throws Exception {
907
908 assertEquals("truncate year-1 failed",
909 dateParser.parse("January 1, 2002"),
910 DateUtils.truncate(date1, Calendar.YEAR));
911 assertEquals("truncate year-2 failed",
912 dateParser.parse("January 1, 2001"),
913 DateUtils.truncate(date2, Calendar.YEAR));
914 assertEquals("truncate month-1 failed",
915 dateParser.parse("February 1, 2002"),
916 DateUtils.truncate(date1, Calendar.MONTH));
917 assertEquals("truncate month-2 failed",
918 dateParser.parse("November 1, 2001"),
919 DateUtils.truncate(date2, Calendar.MONTH));
920 assertEquals("truncate semimonth-1 failed",
921 dateParser.parse("February 1, 2002"),
922 DateUtils.truncate(date1, DateUtils.SEMI_MONTH));
923 assertEquals("truncate semimonth-2 failed",
924 dateParser.parse("November 16, 2001"),
925 DateUtils.truncate(date2, DateUtils.SEMI_MONTH));
926 assertEquals("truncate date-1 failed",
927 dateParser.parse("February 12, 2002"),
928 DateUtils.truncate(date1, Calendar.DATE));
929 assertEquals("truncate date-2 failed",
930 dateParser.parse("November 18, 2001"),
931 DateUtils.truncate(date2, Calendar.DATE));
932 assertEquals("truncate hour-1 failed",
933 dateTimeParser.parse("February 12, 2002 12:00:00.000"),
934 DateUtils.truncate(date1, Calendar.HOUR));
935 assertEquals("truncate hour-2 failed",
936 dateTimeParser.parse("November 18, 2001 1:00:00.000"),
937 DateUtils.truncate(date2, Calendar.HOUR));
938 assertEquals("truncate minute-1 failed",
939 dateTimeParser.parse("February 12, 2002 12:34:00.000"),
940 DateUtils.truncate(date1, Calendar.MINUTE));
941 assertEquals("truncate minute-2 failed",
942 dateTimeParser.parse("November 18, 2001 1:23:00.000"),
943 DateUtils.truncate(date2, Calendar.MINUTE));
944 assertEquals("truncate second-1 failed",
945 dateTimeParser.parse("February 12, 2002 12:34:56.000"),
946 DateUtils.truncate(date1, Calendar.SECOND));
947 assertEquals("truncate second-2 failed",
948 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
949 DateUtils.truncate(date2, Calendar.SECOND));
950 assertEquals("truncate ampm-1 failed",
951 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
952 DateUtils.truncate(dateAmPm1, Calendar.AM_PM));
953 assertEquals("truncate ampm-2 failed",
954 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
955 DateUtils.truncate(dateAmPm2, Calendar.AM_PM));
956 assertEquals("truncate ampm-3 failed",
957 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
958 DateUtils.truncate(dateAmPm3, Calendar.AM_PM));
959 assertEquals("truncate ampm-4 failed",
960 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
961 DateUtils.truncate(dateAmPm4, Calendar.AM_PM));
962
963
964 assertEquals("truncate year-1 failed",
965 dateParser.parse("January 1, 2002"),
966 DateUtils.truncate((Object) date1, Calendar.YEAR));
967 assertEquals("truncate year-2 failed",
968 dateParser.parse("January 1, 2001"),
969 DateUtils.truncate((Object) date2, Calendar.YEAR));
970 assertEquals("truncate month-1 failed",
971 dateParser.parse("February 1, 2002"),
972 DateUtils.truncate((Object) date1, Calendar.MONTH));
973 assertEquals("truncate month-2 failed",
974 dateParser.parse("November 1, 2001"),
975 DateUtils.truncate((Object) date2, Calendar.MONTH));
976 assertEquals("truncate semimonth-1 failed",
977 dateParser.parse("February 1, 2002"),
978 DateUtils.truncate((Object) date1, DateUtils.SEMI_MONTH));
979 assertEquals("truncate semimonth-2 failed",
980 dateParser.parse("November 16, 2001"),
981 DateUtils.truncate((Object) date2, DateUtils.SEMI_MONTH));
982 assertEquals("truncate date-1 failed",
983 dateParser.parse("February 12, 2002"),
984 DateUtils.truncate((Object) date1, Calendar.DATE));
985 assertEquals("truncate date-2 failed",
986 dateParser.parse("November 18, 2001"),
987 DateUtils.truncate((Object) date2, Calendar.DATE));
988 assertEquals("truncate hour-1 failed",
989 dateTimeParser.parse("February 12, 2002 12:00:00.000"),
990 DateUtils.truncate((Object) date1, Calendar.HOUR));
991 assertEquals("truncate hour-2 failed",
992 dateTimeParser.parse("November 18, 2001 1:00:00.000"),
993 DateUtils.truncate((Object) date2, Calendar.HOUR));
994 assertEquals("truncate minute-1 failed",
995 dateTimeParser.parse("February 12, 2002 12:34:00.000"),
996 DateUtils.truncate((Object) date1, Calendar.MINUTE));
997 assertEquals("truncate minute-2 failed",
998 dateTimeParser.parse("November 18, 2001 1:23:00.000"),
999 DateUtils.truncate((Object) date2, Calendar.MINUTE));
1000 assertEquals("truncate second-1 failed",
1001 dateTimeParser.parse("February 12, 2002 12:34:56.000"),
1002 DateUtils.truncate((Object) date1, Calendar.SECOND));
1003 assertEquals("truncate second-2 failed",
1004 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
1005 DateUtils.truncate((Object) date2, Calendar.SECOND));
1006 assertEquals("truncate ampm-1 failed",
1007 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
1008 DateUtils.truncate((Object) dateAmPm1, Calendar.AM_PM));
1009 assertEquals("truncate ampm-2 failed",
1010 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
1011 DateUtils.truncate((Object) dateAmPm2, Calendar.AM_PM));
1012 assertEquals("truncate ampm-3 failed",
1013 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1014 DateUtils.truncate((Object) dateAmPm3, Calendar.AM_PM));
1015 assertEquals("truncate ampm-4 failed",
1016 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1017 DateUtils.truncate((Object) dateAmPm4, Calendar.AM_PM));
1018
1019 assertEquals("truncate calendar second-1 failed",
1020 dateTimeParser.parse("February 12, 2002 12:34:56.000"),
1021 DateUtils.truncate((Object) cal1, Calendar.SECOND));
1022 assertEquals("truncate calendar second-2 failed",
1023 dateTimeParser.parse("November 18, 2001 1:23:11.000"),
1024 DateUtils.truncate((Object) cal2, Calendar.SECOND));
1025
1026 assertEquals("truncate ampm-1 failed",
1027 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
1028 DateUtils.truncate((Object) calAmPm1, Calendar.AM_PM));
1029 assertEquals("truncate ampm-2 failed",
1030 dateTimeParser.parse("February 3, 2002 00:00:00.000"),
1031 DateUtils.truncate((Object) calAmPm2, Calendar.AM_PM));
1032 assertEquals("truncate ampm-3 failed",
1033 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1034 DateUtils.truncate((Object) calAmPm3, Calendar.AM_PM));
1035 assertEquals("truncate ampm-4 failed",
1036 dateTimeParser.parse("February 3, 2002 12:00:00.000"),
1037 DateUtils.truncate((Object) calAmPm4, Calendar.AM_PM));
1038
1039 try {
1040 DateUtils.truncate((Date) null, Calendar.SECOND);
1041 fail();
1042 } catch (IllegalArgumentException ex) {}
1043 try {
1044 DateUtils.truncate((Calendar) null, Calendar.SECOND);
1045 fail();
1046 } catch (IllegalArgumentException ex) {}
1047 try {
1048 DateUtils.truncate((Object) null, Calendar.SECOND);
1049 fail();
1050 } catch (IllegalArgumentException ex) {}
1051 try {
1052 DateUtils.truncate("", Calendar.SECOND);
1053 fail();
1054 } catch (ClassCastException ex) {}
1055
1056
1057
1058 TimeZone.setDefault(zone);
1059 dateTimeParser.setTimeZone(zone);
1060 assertEquals("truncate MET date across DST change-over",
1061 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
1062 DateUtils.truncate(date3, Calendar.DATE));
1063 assertEquals("truncate MET date across DST change-over",
1064 dateTimeParser.parse("March 30, 2003 00:00:00.000"),
1065 DateUtils.truncate((Object) cal3, Calendar.DATE));
1066
1067 assertEquals("truncate MET date across DST change-over",
1068 dateTimeParser.parse("October 26, 2003 00:00:00.000"),
1069 DateUtils.truncate(date8, Calendar.DATE));
1070 assertEquals("truncate MET date across DST change-over",
1071 dateTimeParser.parse("October 26, 2003 00:00:00.000"),
1072 DateUtils.truncate((Object) cal8, Calendar.DATE));
1073 TimeZone.setDefault(defaultZone);
1074 dateTimeParser.setTimeZone(defaultZone);
1075
1076
1077 Date endOfTime = new Date(Long.MAX_VALUE);
1078 GregorianCalendar endCal = new GregorianCalendar();
1079 endCal.setTime(endOfTime);
1080 try {
1081 DateUtils.truncate(endCal, Calendar.DATE);
1082 fail();
1083 } catch (ArithmeticException ex) {}
1084 endCal.set(Calendar.YEAR, 280000001);
1085 try {
1086 DateUtils.truncate(endCal, Calendar.DATE);
1087 fail();
1088 } catch (ArithmeticException ex) {}
1089 endCal.set(Calendar.YEAR, 280000000);
1090 Calendar cal = DateUtils.truncate(endCal, Calendar.DATE);
1091 assertEquals(0, cal.get(Calendar.HOUR));
1092 }
1093
1094
1095
1096
1097
1098
1099 public void testTruncateLang59() throws Exception {
1100 if (!SystemUtils.isJavaVersionAtLeast(1.4f)) {
1101 this.warn("WARNING: Test for LANG-59 not run since the current version is " + SystemUtils.JAVA_VERSION);
1102 return;
1103 }
1104
1105
1106 TimeZone MST_MDT = TimeZone.getTimeZone("MST7MDT");
1107 TimeZone.setDefault(MST_MDT);
1108 DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
1109 format.setTimeZone(MST_MDT);
1110
1111 Date oct31_01MDT = new Date(1099206000000L);
1112
1113 Date oct31MDT = new Date(oct31_01MDT.getTime() - 3600000L);
1114 Date oct31_01_02MDT = new Date(oct31_01MDT.getTime() + 120000L);
1115 Date oct31_01_02_03MDT = new Date(oct31_01_02MDT.getTime() + 3000L);
1116 Date oct31_01_02_03_04MDT = new Date(oct31_01_02_03MDT.getTime() + 4L);
1117
1118 assertEquals("Check 00:00:00.000", "2004-10-31 00:00:00.000 MDT", format.format(oct31MDT));
1119 assertEquals("Check 01:00:00.000", "2004-10-31 01:00:00.000 MDT", format.format(oct31_01MDT));
1120 assertEquals("Check 01:02:00.000", "2004-10-31 01:02:00.000 MDT", format.format(oct31_01_02MDT));
1121 assertEquals("Check 01:02:03.000", "2004-10-31 01:02:03.000 MDT", format.format(oct31_01_02_03MDT));
1122 assertEquals("Check 01:02:03.004", "2004-10-31 01:02:03.004 MDT", format.format(oct31_01_02_03_04MDT));
1123
1124
1125 Calendar gval = Calendar.getInstance();
1126 gval.setTime(new Date(oct31_01MDT.getTime()));
1127 gval.set(Calendar.MINUTE, gval.get(Calendar.MINUTE));
1128 assertEquals("Demonstrate Problem", gval.getTime().getTime(), oct31_01MDT.getTime() + 3600000L);
1129
1130
1131 assertEquals("Truncate Calendar.MILLISECOND",
1132 oct31_01_02_03_04MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.MILLISECOND));
1133
1134 assertEquals("Truncate Calendar.SECOND",
1135 oct31_01_02_03MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.SECOND));
1136
1137 assertEquals("Truncate Calendar.MINUTE",
1138 oct31_01_02MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.MINUTE));
1139
1140 assertEquals("Truncate Calendar.HOUR_OF_DAY",
1141 oct31_01MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.HOUR_OF_DAY));
1142
1143 assertEquals("Truncate Calendar.HOUR",
1144 oct31_01MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.HOUR));
1145
1146 assertEquals("Truncate Calendar.DATE",
1147 oct31MDT, DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.DATE));
1148
1149
1150
1151 assertEquals("Round Calendar.MILLISECOND",
1152 oct31_01_02_03_04MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.MILLISECOND));
1153
1154 assertEquals("Round Calendar.SECOND",
1155 oct31_01_02_03MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.SECOND));
1156
1157 assertEquals("Round Calendar.MINUTE",
1158 oct31_01_02MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.MINUTE));
1159
1160 assertEquals("Round Calendar.HOUR_OF_DAY",
1161 oct31_01MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.HOUR_OF_DAY));
1162
1163 assertEquals("Round Calendar.HOUR",
1164 oct31_01MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.HOUR));
1165
1166 assertEquals("Round Calendar.DATE",
1167 oct31MDT, DateUtils.round(oct31_01_02_03_04MDT, Calendar.DATE));
1168
1169
1170 TimeZone.setDefault(defaultZone);
1171 }
1172
1173
1174
1175
1176 public void testIteratorEx() throws Exception {
1177 try {
1178 DateUtils.iterator(Calendar.getInstance(), -9999);
1179 } catch (IllegalArgumentException ex) {}
1180 try {
1181 DateUtils.iterator((Date) null, DateUtils.RANGE_WEEK_CENTER);
1182 fail();
1183 } catch (IllegalArgumentException ex) {}
1184 try {
1185 DateUtils.iterator((Calendar) null, DateUtils.RANGE_WEEK_CENTER);
1186 fail();
1187 } catch (IllegalArgumentException ex) {}
1188 try {
1189 DateUtils.iterator((Object) null, DateUtils.RANGE_WEEK_CENTER);
1190 fail();
1191 } catch (IllegalArgumentException ex) {}
1192 try {
1193 DateUtils.iterator("", DateUtils.RANGE_WEEK_CENTER);
1194 fail();
1195 } catch (ClassCastException ex) {}
1196 }
1197
1198
1199
1200
1201 public void testWeekIterator() throws Exception {
1202 Calendar now = Calendar.getInstance();
1203 for (int i = 0; i< 7; i++) {
1204 Calendar today = DateUtils.truncate(now, Calendar.DATE);
1205 Calendar sunday = DateUtils.truncate(now, Calendar.DATE);
1206 sunday.add(Calendar.DATE, 1 - sunday.get(Calendar.DAY_OF_WEEK));
1207 Calendar monday = DateUtils.truncate(now, Calendar.DATE);
1208 if (monday.get(Calendar.DAY_OF_WEEK) == 1) {
1209
1210 monday.add(Calendar.DATE, -6);
1211 } else {
1212 monday.add(Calendar.DATE, 2 - monday.get(Calendar.DAY_OF_WEEK));
1213 }
1214 Calendar centered = DateUtils.truncate(now, Calendar.DATE);
1215 centered.add(Calendar.DATE, -3);
1216
1217 Iterator it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_SUNDAY);
1218 assertWeekIterator(it, sunday);
1219 it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_MONDAY);
1220 assertWeekIterator(it, monday);
1221 it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_RELATIVE);
1222 assertWeekIterator(it, today);
1223 it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_CENTER);
1224 assertWeekIterator(it, centered);
1225
1226 it = DateUtils.iterator((Object) now, DateUtils.RANGE_WEEK_CENTER);
1227 assertWeekIterator(it, centered);
1228 it = DateUtils.iterator((Object) now.getTime(), DateUtils.RANGE_WEEK_CENTER);
1229 assertWeekIterator(it, centered);
1230 try {
1231 it.next();
1232 fail();
1233 } catch (NoSuchElementException ex) {}
1234 it = DateUtils.iterator(now, DateUtils.RANGE_WEEK_CENTER);
1235 it.next();
1236 try {
1237 it.remove();
1238 } catch( UnsupportedOperationException ex) {}
1239
1240 now.add(Calendar.DATE,1);
1241 }
1242 }
1243
1244
1245
1246
1247 public void testMonthIterator() throws Exception {
1248 Iterator it = DateUtils.iterator(date1, DateUtils.RANGE_MONTH_SUNDAY);
1249 assertWeekIterator(it,
1250 dateParser.parse("January 27, 2002"),
1251 dateParser.parse("March 2, 2002"));
1252
1253 it = DateUtils.iterator(date1, DateUtils.RANGE_MONTH_MONDAY);
1254 assertWeekIterator(it,
1255 dateParser.parse("January 28, 2002"),
1256 dateParser.parse("March 3, 2002"));
1257
1258 it = DateUtils.iterator(date2, DateUtils.RANGE_MONTH_SUNDAY);
1259 assertWeekIterator(it,
1260 dateParser.parse("October 28, 2001"),
1261 dateParser.parse("December 1, 2001"));
1262
1263 it = DateUtils.iterator(date2, DateUtils.RANGE_MONTH_MONDAY);
1264 assertWeekIterator(it,
1265 dateParser.parse("October 29, 2001"),
1266 dateParser.parse("December 2, 2001"));
1267 }
1268
1269
1270
1271
1272
1273 private static void assertWeekIterator(Iterator it, Calendar start) {
1274 Calendar end = (Calendar) start.clone();
1275 end.add(Calendar.DATE, 6);
1276
1277 assertWeekIterator(it, start, end);
1278 }
1279
1280
1281
1282
1283 private static void assertWeekIterator(Iterator it, Date start, Date end) {
1284 Calendar calStart = Calendar.getInstance();
1285 calStart.setTime(start);
1286 Calendar calEnd = Calendar.getInstance();
1287 calEnd.setTime(end);
1288
1289 assertWeekIterator(it, calStart, calEnd);
1290 }
1291
1292
1293
1294
1295
1296
1297 private static void assertWeekIterator(Iterator it, Calendar start, Calendar end) {
1298 Calendar cal = (Calendar) it.next();
1299 assertEquals("", start, cal, 0);
1300 Calendar last = null;
1301 int count = 1;
1302 while (it.hasNext()) {
1303
1304 assertEquals("", cal, DateUtils.truncate(cal, Calendar.DATE), 0);
1305
1306 last = cal;
1307 cal = (Calendar) it.next();
1308 count++;
1309
1310
1311 last.add(Calendar.DATE, 1);
1312 assertEquals("", last, cal, 0);
1313 }
1314 if (count % 7 != 0) {
1315 throw new AssertionFailedError("There were " + count + " days in this iterator");
1316 }
1317 assertEquals("", end, cal, 0);