KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jodd > datetime > TestJDateTime


1 package jodd.datetime;
2
3 import java.util.Calendar;
4 import java.util.Date;
5 import java.util.GregorianCalendar;
6
7 import junit.framework.TestCase;
8
9 public class TestJDateTime extends TestCase {
10
11     public void testSetGetMillis() {
12         JDateTime jdt = new JDateTime(2003, 2, 28, 23, 59, 59.000);
13         
14         for (int i = 0; i < 1000; i++) {
15             jdt.setMillisecond(i);
16             assertEquals(i, jdt.getMillisecond());
17         }
18     }
19
20
21     public void testSet999Millis() {
22
23         JDateTime jdt = new JDateTime();
24
25         jdt.set(2003, 2, 28, 23, 59, 59.999);
26         assertEquals("2003-02-28 23:59:59.999", jdt.toString());
27
28         jdt.set(2003, 2, 28, 23, 59, 60.0);
29         assertEquals("2003-03-01 00:00:00.000", jdt.toString());
30
31         // this used to be a problem
32
jdt.set(2003, 2, 28, 23, 59, 59.999999); // 6 fraction digits
33
assertEquals("2003-02-28 23:59:59.999", jdt.toString());
34
35         // this used to be a problem
36
jdt.set(2003, 2, 28, 23, 59, 59.999999999999); // 12 fraction digits - last working
37
assertEquals("2003-02-28 23:59:59.999", jdt.toString());
38
39         jdt.set(2003, 2, 28, 23, 59, 59.9999999999999); // 13 fraction digits
40
assertEquals("2003-02-28 23:59:59.999", jdt.toString());
41
42         jdt.set(2003, 2, 28, 23, 59, 59.99999999999999); // 14 fraction digits (max)
43
assertEquals("2003-02-28 23:59:59.999", jdt.toString());
44
45         jdt.set(2003, 2, 28, 23, 59, 59.999999999999999); // 15 decimals -> 59.9....9 = 60.0
46
assertEquals("2003-03-01 00:00:00.000", jdt.toString());
47     }
48
49
50     public void testDaysInMonth() {
51         JDateTime jdt = new JDateTime(2003, 1, 1);
52         assertEquals(31, jdt.getMonthLength());
53         assertEquals(28, jdt.getMonthLength(2));
54
55         jdt = new JDateTime(2000, 1, 1);
56         assertEquals(31, jdt.getMonthLength());
57         assertEquals(29, jdt.getMonthLength(2));
58     }
59
60
61     public void testToString() {
62
63         JDateTime jdt = new JDateTime(2003, 1, 1, 01, 01, 01.001);
64         assertEquals("2003-01-01 01:01:01.001", jdt.toString());
65
66         jdt.set(200, 10, 10, 10, 10, 10.012);
67         assertEquals("200-10-10 10:10:10.012", jdt.toString());
68
69         jdt.set(2003, 10, 10, 10, 10, 10.123);
70         assertEquals("2003-10-10 10:10:10.123", jdt.toString());
71     }
72
73     public void testAddMonths() {
74         JDateTime gt = new JDateTime(2003, 1, 31);
75         gt.setMonthFix(false);
76         gt.addMonth(1);
77         assertEquals("2003-03-03 00:00:00.000", gt.toString());
78
79         gt.setDate(2003, 1, 31);
80         gt.addMonth(1, true);
81         assertEquals("2003-02-28 00:00:00.000", gt.toString());
82
83         gt.setDate(2004, 1, 31);
84         gt.addMonth(1);
85         assertEquals("2004-03-02 00:00:00.000", gt.toString());
86
87         gt.setDate(2004, 1, 31);
88         gt.addMonth(1, true);
89         assertEquals("2004-02-29 00:00:00.000", gt.toString());
90
91         gt.setDate(2003, 1, 25);
92         gt.add(0, 1, 6, true);
93         assertEquals("2003-02-28 00:00:00.000", gt.toString());
94
95         gt.setDate(2003, 1, 20);
96         gt.add(0, 10, 11, true);
97         assertEquals("2003-11-30 00:00:00.000", gt.toString());
98
99         gt.setDate(2004, 2, 29);
100         gt.addYear(1, true);
101         assertEquals("2005-02-28 00:00:00.000", gt.toString());
102
103
104
105         gt.setDate(2004, 2, 29);
106         gt.addYear(-1, true);
107         assertEquals("2003-02-28 00:00:00.000", gt.toString());
108
109         gt.setDate(2003, 11, 31); // == 2003-12-01
110
gt.add(0, -8, -31, true);
111         assertEquals("2003-02-28 00:00:00.000", gt.toString());
112         gt.setDate(2003, 11, 31);
113         gt.add(0, -8, -31, false);
114         assertEquals("2003-03-01 00:00:00.000", gt.toString());
115
116         gt.setDate(2004, 5, 31);
117         gt.addMonth(-3, true);
118         assertEquals("2004-02-29 00:00:00.000", gt.toString());
119         gt.setDate(2003, 11, 31);
120         gt.addMonth(-10, true);
121         assertEquals("2003-02-01 00:00:00.000", gt.toString());
122
123     }
124
125
126     public void testMiscSetsGets() {
127         JDateTime gt = new JDateTime(2003, 11, 26, 21, 8, 25.173);
128         
129         gt.setYear(2002);
130         assertEquals(2002, gt.getYear());
131
132         gt.setMonth(10);
133         assertEquals(10, gt.getMonth());
134         
135         gt.setDay(27);
136         assertEquals(27, gt.getDay());
137
138         gt.setHour(22);
139         assertEquals(22, gt.getHour());
140
141         gt.setMinute(8);
142         assertEquals(8, gt.getMinute());
143
144         gt.setSecond(24);
145         assertEquals(24, (int)gt.getSecond());
146         assertEquals(24.173, gt.getSecond(), 0.0005);
147
148         gt.setSecond(25.371);
149         assertEquals(25.371, gt.getSecond(), 0.0005);
150
151         gt.setMillisecond(173);
152         assertEquals(173, gt.getMillisecond());
153
154         assertEquals("2002-10-27 22:08:25.173", gt.toString());
155
156     }
157
158     public void testLeapYears() {
159
160         JDateTime gt = new JDateTime(1984, 02, 29);
161         assertTrue(gt.isLeap());
162         assertEquals("1984-02-29 00:00:00.000", gt.toString());
163
164         gt.set(1985, 02, 29);
165         assertFalse(gt.isLeap());
166         assertEquals("1985-03-01 00:00:00.000", gt.toString());
167
168         gt.set(2004, 02, 29);
169         assertTrue(gt.isLeap());
170         assertEquals("2004-02-29 00:00:00.000", gt.toString());
171
172         gt.set(1900, 02, 29);
173         assertFalse(gt.isLeap()); // not a leap year
174
assertEquals("1900-03-01 00:00:00.000", gt.toString());
175
176         gt.set(2000, 02, 29);
177         assertTrue(gt.isLeap()); // a leap year
178
assertEquals("2000-02-29 00:00:00.000", gt.toString());
179
180         gt.set(1600, 02, 29);
181         assertTrue(gt.isLeap()); // a leap year
182
assertEquals("1600-02-29 00:00:00.000", gt.toString());
183
184         for (int y = -4700; y < 5000; y++) {
185             gt.set(y, 02, 29);
186             assertEquals(31 + 29, gt.getDayOfYear());
187             if (gt.isLeap()) {
188                 assertEquals(29, gt.getDay());
189             } else {
190                 assertEquals(01, gt.getDay());
191             }
192         }
193     }
194
195
196     public void testFormatTemplates() {
197         JDateTime gt = new JDateTime(1975, 01, 01);
198         assertEquals("2442413.5", gt.getJulianDate().toString());
199         assertEquals("1975-01-01 00:00:00.000", gt.get());
200
201         gt.setFormatTemplate("YYYY.MM.DD");
202         assertEquals("1975.01.01", gt.get());
203
204         JDateTime.setDefaultFormatTemplate("YYYY/MM/DD hh:mm");
205         assertEquals("1975.01.01", gt.get());
206
207         gt.resetFormatTemplate();
208         assertEquals("1975/01/01 00:00", gt.get());
209
210         assertEquals("01: January (Jan)", gt.get("MM: MML (MMS)"));
211         assertEquals("01 is 3: Wednesday (Wed)", gt.get("DD is D: DL (DS)"));
212
213         gt.addDay(27);
214         assertEquals("028 / 05 / W05", gt.get("DDD / WW / WWW"));
215
216         JDateTime.resetDefaultFormatTemplate();
217     }
218
219
220
221     public void testGetQuotes() {
222         JDateTime jdt = new JDateTime(1968, 9, 30);
223         assertEquals("SHE WAS B'O'R'N ON 30 September 1968", jdt.get("SHE 'WAS' 'B''O''R''N' ON DD MML YYYY"));
224         assertEquals("5 is a week number and W is letter", jdt.get("W is a week number and 'W is letter"));
225     }
226
227
228
229
230     public void testSetFromString() {
231         JDateTime gt = new JDateTime();
232         gt.set("2003-11-24 23:18:38.173");
233         assertEquals("2003-11-24 23:18:38.173", gt.get());
234
235         gt.set("2003-11-23");
236         assertEquals("2003-11-23 00:00:00.000", gt.get());
237
238         gt.set("2003-14-23");
239         assertEquals("2004-02-23 00:00:00.000", gt.get());
240
241         gt.set("2003-4-3");
242         assertEquals("2003-04-03 00:00:00.000", gt.get());
243
244         gt.set("2003-4-x");
245         assertEquals("2003-04-03 00:00:00.000", gt.get()); // because of error, date is not changed
246

247         gt.set("2003-11-23 13:67");
248         assertEquals("2003-11-23 14:07:00.000", gt.get());
249
250         gt.set("2003-11-23 13:07:55");
251         assertEquals("2003-11-23 13:07:55.000", gt.get());
252
253         gt.set("2003-11-23 13:07:5");
254         assertEquals("2003-11-23 13:07:05.000", gt.get());
255
256         gt.set("123456-7-8");
257         assertEquals("123456-07-08 00:00:00.000", gt.get());
258
259         gt.set("2003-11-23");
260         assertEquals("2003-11-23 00:00:00.000", gt.get());
261     }
262     
263     public void testLoadFromStoreTo() {
264         Calendar c = Calendar.getInstance();
265         c.set(2001, 00, 01, 02, 03, 04);
266         c.set(Calendar.MILLISECOND, 500);
267         JDateTime gt = new JDateTime();
268         gt.loadFrom(c);
269         assertEquals("2001-01-01 02:03:04.500", gt.toString());
270         Calendar c1 = gt.getCalendarInstance();
271         assertEquals(2001, c1.get(Calendar.YEAR));
272         assertEquals(0, c1.get(Calendar.MONTH));
273         assertEquals(1, c1.get(Calendar.DAY_OF_MONTH));
274         assertEquals(2, c1.get(Calendar.HOUR_OF_DAY));
275         assertEquals(3, c1.get(Calendar.MINUTE));
276         assertEquals(4, c1.get(Calendar.SECOND));
277         assertEquals(500, c1.get(Calendar.MILLISECOND));
278
279
280         GregorianCalendar gc = new GregorianCalendar(2002, 05, 02, 03, 04, 05);
281         gc.set(GregorianCalendar.MILLISECOND, 600);
282         gt.loadFrom(gc);
283         assertEquals("2002-06-02 03:04:05.600", gt.toString());
284         GregorianCalendar gc1 = new GregorianCalendar();
285         gt.storeTo(gc1);
286         assertEquals(2002, gc1.get(GregorianCalendar.YEAR));
287         assertEquals(5, gc1.get(GregorianCalendar.MONTH));
288         assertEquals(2, gc1.get(GregorianCalendar.DAY_OF_MONTH));
289         assertEquals(3, gc1.get(GregorianCalendar.HOUR_OF_DAY));
290         assertEquals(4, gc1.get(GregorianCalendar.MINUTE));
291         assertEquals(5, gc1.get(GregorianCalendar.SECOND));
292         assertEquals(600, gc1.get(GregorianCalendar.MILLISECOND));
293
294         
295         Date d = new Date(101, 2, 3, 4, 5, 6);
296         gt.loadFrom(d);
297         assertEquals("2001-03-03 04:05:06.000", gt.toString());
298         Date d2 = gt.getDateInstance();
299         assertEquals(101, d2.getYear());
300         assertEquals(2, d2.getMonth());
301         assertEquals(3, d2.getDate());
302         assertEquals(4, d2.getHours());
303         assertEquals(5, d2.getMinutes());
304         assertEquals(6, d2.getSeconds());
305
306         
307         JDateTime gt_new = new JDateTime(2003, 6, 5, 4, 3, 2.1);
308         gt.loadFrom(gt_new);
309         assertEquals("2003-06-05 04:03:02.100", gt.toString());
310         JDateTime gt2 = (JDateTime) gt.getInstance(JDateTime.class);
311         assertEquals(2003, gt2.getYear());
312         assertEquals(6, gt2.getMonth());
313         assertEquals(5, gt2.getDay());
314         assertEquals(4, gt2.getHour());
315         assertEquals(3, gt2.getMinute());
316         assertEquals(2, (int)gt2.getSecond());
317         assertEquals(100, gt2.getMillisecond());
318
319         
320         java.sql.Date sd = new java.sql.Date(123, 4, 5);
321         gt.loadFrom(sd);
322         assertEquals("2023-05-05 00:00:00.000", gt.toString());
323         java.sql.Date sd2 = new java.sql.Date(1, 2, 3);
324         gt.storeTo(sd2);
325         assertEquals(123, sd2.getYear());
326         assertEquals(4, sd2.getMonth());
327         assertEquals(5, sd2.getDate());
328
329         
330         java.sql.Timestamp st = new java.sql.Timestamp(123, 4, 5, 6, 7, 8, 500000000);
331         gt.loadFrom(st);
332         assertEquals("2023-05-05 06:07:08.500", gt.toString());
333         java.sql.Timestamp st2 = gt.getSqlTimestampInstance();
334         assertEquals(123, st2.getYear());
335         assertEquals(4, st2.getMonth());
336         assertEquals(5, st2.getDate());
337         assertEquals(6, st2.getHours());
338         assertEquals(7, st2.getMinutes());
339         assertEquals(8, st2.getSeconds());
340         assertEquals(500, st2.getNanos()/1000000);
341     }
342
343 }
344
Popular Tags