Lines 36-41
Link Here
|
36 |
* |
36 |
* |
37 |
* @author Dan Sherman (dsherman at isisph.com) |
37 |
* @author Dan Sherman (dsherman at isisph.com) |
38 |
* @author Hack Kampbjorn (hak at 2mba.dk) |
38 |
* @author Hack Kampbjorn (hak at 2mba.dk) |
|
|
39 |
* @author Pavel Krupets (pkrupets at palmtreebusiness dot com) |
40 |
* @author Alex Jacoby (ajacoby at gmail.com) |
39 |
* @version %I%, %G% |
41 |
* @version %I%, %G% |
40 |
*/ |
42 |
*/ |
41 |
|
43 |
|
Lines 47-53
Link Here
|
47 |
public static final int CALENDAR_FEBRUARY = 1; |
49 |
public static final int CALENDAR_FEBRUARY = 1; |
48 |
public static final int CALENDAR_MARCH = 2; |
50 |
public static final int CALENDAR_MARCH = 2; |
49 |
public static final int CALENDAR_APRIL = 3; |
51 |
public static final int CALENDAR_APRIL = 3; |
50 |
|
52 |
public static final int CALENDAR_JULY = 6; |
|
|
53 |
public static final int CALENDAR_OCTOBER = 9; |
54 |
|
51 |
public TestHSSFDateUtil(String s) |
55 |
public TestHSSFDateUtil(String s) |
52 |
{ |
56 |
{ |
53 |
super(s); |
57 |
super(s); |
Lines 67-76
Link Here
|
67 |
GregorianCalendar date = new GregorianCalendar(2002, 0, 1, |
71 |
GregorianCalendar date = new GregorianCalendar(2002, 0, 1, |
68 |
hour, 1, 1); |
72 |
hour, 1, 1); |
69 |
double excelDate = |
73 |
double excelDate = |
70 |
HSSFDateUtil.getExcelDate(date.getTime()); |
74 |
HSSFDateUtil.getExcelDate(date.getTime(), false); |
71 |
|
75 |
|
72 |
assertEquals("Checking hour = " + hour, date.getTime().getTime(), |
76 |
assertEquals("Checking hour = " + hour, date.getTime().getTime(), |
73 |
HSSFDateUtil.getJavaDate(excelDate).getTime()); |
77 |
HSSFDateUtil.getJavaDate(excelDate, false).getTime()); |
74 |
} |
78 |
} |
75 |
|
79 |
|
76 |
// check 1900 and 1904 date windowing conversions |
80 |
// check 1900 and 1904 date windowing conversions |
Lines 99-105
Link Here
|
99 |
public void testExcelConversionOnDSTStart() { |
103 |
public void testExcelConversionOnDSTStart() { |
100 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
104 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
101 |
TimeZone.setDefault(cet); |
105 |
TimeZone.setDefault(cet); |
102 |
Calendar cal = new GregorianCalendar(2004, Calendar.MARCH, 28); |
106 |
Calendar cal = new GregorianCalendar(2004, CALENDAR_MARCH, 28); |
103 |
for (int hour = 0; hour < 24; hour++) { |
107 |
for (int hour = 0; hour < 24; hour++) { |
104 |
|
108 |
|
105 |
// Skip 02:00 CET as that is the Daylight change time |
109 |
// Skip 02:00 CET as that is the Daylight change time |
Lines 110-116
Link Here
|
110 |
|
114 |
|
111 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
115 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
112 |
Date javaDate = cal.getTime(); |
116 |
Date javaDate = cal.getTime(); |
113 |
double excelDate = HSSFDateUtil.getExcelDate(javaDate); |
117 |
double excelDate = HSSFDateUtil.getExcelDate(javaDate, false); |
114 |
double difference = excelDate - Math.floor(excelDate); |
118 |
double difference = excelDate - Math.floor(excelDate); |
115 |
int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60; |
119 |
int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60; |
116 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
120 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
Lines 118-124
Link Here
|
118 |
differenceInHours); |
122 |
differenceInHours); |
119 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
123 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
120 |
javaDate.getTime(), |
124 |
javaDate.getTime(), |
121 |
HSSFDateUtil.getJavaDate(excelDate).getTime()); |
125 |
HSSFDateUtil.getJavaDate(excelDate, false).getTime()); |
122 |
} |
126 |
} |
123 |
} |
127 |
} |
124 |
|
128 |
|
Lines 129-136
Link Here
|
129 |
public void testJavaConversionOnDSTStart() { |
133 |
public void testJavaConversionOnDSTStart() { |
130 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
134 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
131 |
TimeZone.setDefault(cet); |
135 |
TimeZone.setDefault(cet); |
132 |
Calendar cal = new GregorianCalendar(2004, Calendar.MARCH, 28); |
136 |
Calendar cal = new GregorianCalendar(2004, CALENDAR_MARCH, 28); |
133 |
double excelDate = HSSFDateUtil.getExcelDate(cal.getTime()); |
137 |
double excelDate = HSSFDateUtil.getExcelDate(cal.getTime(), false); |
134 |
double oneHour = 1.0 / 24; |
138 |
double oneHour = 1.0 / 24; |
135 |
double oneMinute = oneHour / 60; |
139 |
double oneMinute = oneHour / 60; |
136 |
for (int hour = 0; hour < 24; hour++, excelDate += oneHour) { |
140 |
for (int hour = 0; hour < 24; hour++, excelDate += oneHour) { |
Lines 142-151
Link Here
|
142 |
} |
146 |
} |
143 |
|
147 |
|
144 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
148 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
145 |
Date javaDate = HSSFDateUtil.getJavaDate(excelDate); |
149 |
Date javaDate = HSSFDateUtil.getJavaDate(excelDate, false); |
146 |
assertEquals("Checking " + hour + " hours on Daylight Saving Time start date", |
150 |
assertEquals("Checking " + hour + " hours on Daylight Saving Time start date", |
147 |
excelDate, |
151 |
excelDate, |
148 |
HSSFDateUtil.getExcelDate(javaDate), oneMinute); |
152 |
HSSFDateUtil.getExcelDate(javaDate, false), oneMinute); |
149 |
} |
153 |
} |
150 |
} |
154 |
} |
151 |
|
155 |
|
Lines 156-166
Link Here
|
156 |
public void testExcelConversionOnDSTEnd() { |
160 |
public void testExcelConversionOnDSTEnd() { |
157 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
161 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
158 |
TimeZone.setDefault(cet); |
162 |
TimeZone.setDefault(cet); |
159 |
Calendar cal = new GregorianCalendar(2004, Calendar.OCTOBER, 31); |
163 |
Calendar cal = new GregorianCalendar(2004, CALENDAR_OCTOBER, 31); |
160 |
for (int hour = 0; hour < 24; hour++) { |
164 |
for (int hour = 0; hour < 24; hour++) { |
161 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
165 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
162 |
Date javaDate = cal.getTime(); |
166 |
Date javaDate = cal.getTime(); |
163 |
double excelDate = HSSFDateUtil.getExcelDate(javaDate); |
167 |
double excelDate = HSSFDateUtil.getExcelDate(javaDate, false); |
164 |
double difference = excelDate - Math.floor(excelDate); |
168 |
double difference = excelDate - Math.floor(excelDate); |
165 |
int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60; |
169 |
int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60; |
166 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time end date", |
170 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time end date", |
Lines 168-174
Link Here
|
168 |
differenceInHours); |
172 |
differenceInHours); |
169 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
173 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
170 |
javaDate.getTime(), |
174 |
javaDate.getTime(), |
171 |
HSSFDateUtil.getJavaDate(excelDate).getTime()); |
175 |
HSSFDateUtil.getJavaDate(excelDate, false).getTime()); |
172 |
} |
176 |
} |
173 |
} |
177 |
} |
174 |
|
178 |
|
Lines 179-194
Link Here
|
179 |
public void testJavaConversionOnDSTEnd() { |
183 |
public void testJavaConversionOnDSTEnd() { |
180 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
184 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
181 |
TimeZone.setDefault(cet); |
185 |
TimeZone.setDefault(cet); |
182 |
Calendar cal = new GregorianCalendar(2004, Calendar.OCTOBER, 31); |
186 |
Calendar cal = new GregorianCalendar(2004, CALENDAR_OCTOBER, 31); |
183 |
double excelDate = HSSFDateUtil.getExcelDate(cal.getTime()); |
187 |
double excelDate = HSSFDateUtil.getExcelDate(cal.getTime(), false); |
184 |
double oneHour = 1.0 / 24; |
188 |
double oneHour = 1.0 / 24; |
185 |
double oneMinute = oneHour / 60; |
189 |
double oneMinute = oneHour / 60; |
186 |
for (int hour = 0; hour < 24; hour++, excelDate += oneHour) { |
190 |
for (int hour = 0; hour < 24; hour++, excelDate += oneHour) { |
187 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
191 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
188 |
Date javaDate = HSSFDateUtil.getJavaDate(excelDate); |
192 |
Date javaDate = HSSFDateUtil.getJavaDate(excelDate, false); |
189 |
assertEquals("Checking " + hour + " hours on Daylight Saving Time start date", |
193 |
assertEquals("Checking " + hour + " hours on Daylight Saving Time start date", |
190 |
excelDate, |
194 |
excelDate, |
191 |
HSSFDateUtil.getExcelDate(javaDate), oneMinute); |
195 |
HSSFDateUtil.getExcelDate(javaDate, false), oneMinute); |
192 |
} |
196 |
} |
193 |
} |
197 |
} |
194 |
|
198 |
|
Lines 315-339
Link Here
|
315 |
} |
319 |
} |
316 |
|
320 |
|
317 |
public void testDateBug_2Excel() { |
321 |
public void testDateBug_2Excel() { |
318 |
assertEquals(59.0, HSSFDateUtil.getExcelDate(createDate(1900, CALENDAR_FEBRUARY, 28)), 0.00001); |
322 |
assertEquals(59.0, HSSFDateUtil.getExcelDate(createDate(1900, CALENDAR_FEBRUARY, 28), false), 0.00001); |
319 |
assertEquals(61.0, HSSFDateUtil.getExcelDate(createDate(1900, CALENDAR_MARCH, 1)), 0.00001); |
323 |
assertEquals(61.0, HSSFDateUtil.getExcelDate(createDate(1900, CALENDAR_MARCH, 1), false), 0.00001); |
320 |
|
324 |
|
321 |
assertEquals(37315.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_FEBRUARY, 28)), 0.00001); |
325 |
assertEquals(37315.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_FEBRUARY, 28), false), 0.00001); |
322 |
assertEquals(37316.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_MARCH, 1)), 0.00001); |
326 |
assertEquals(37316.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_MARCH, 1), false), 0.00001); |
323 |
assertEquals(37257.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_JANUARY, 1)), 0.00001); |
327 |
assertEquals(37257.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_JANUARY, 1), false), 0.00001); |
324 |
assertEquals(38074.00, HSSFDateUtil.getExcelDate(createDate(2004, CALENDAR_MARCH, 28)), 0.00001); |
328 |
assertEquals(38074.00, HSSFDateUtil.getExcelDate(createDate(2004, CALENDAR_MARCH, 28), false), 0.00001); |
325 |
} |
329 |
} |
326 |
|
330 |
|
327 |
public void testDateBug_2Java() { |
331 |
public void testDateBug_2Java() { |
328 |
assertEquals(createDate(1900, Calendar.FEBRUARY, 28), HSSFDateUtil.getJavaDate(59.0)); |
332 |
assertEquals(createDate(1900, CALENDAR_FEBRUARY, 28), HSSFDateUtil.getJavaDate(59.0, false)); |
329 |
assertEquals(createDate(1900, Calendar.MARCH, 1), HSSFDateUtil.getJavaDate(61.0)); |
333 |
assertEquals(createDate(1900, CALENDAR_MARCH, 1), HSSFDateUtil.getJavaDate(61.0, false)); |
330 |
|
334 |
|
331 |
assertEquals(createDate(2002, Calendar.FEBRUARY, 28), HSSFDateUtil.getJavaDate(37315.00)); |
335 |
assertEquals(createDate(2002, CALENDAR_FEBRUARY, 28), HSSFDateUtil.getJavaDate(37315.00, false)); |
332 |
assertEquals(createDate(2002, Calendar.MARCH, 1), HSSFDateUtil.getJavaDate(37316.00)); |
336 |
assertEquals(createDate(2002, CALENDAR_MARCH, 1), HSSFDateUtil.getJavaDate(37316.00, false)); |
333 |
assertEquals(createDate(2002, Calendar.JANUARY, 1), HSSFDateUtil.getJavaDate(37257.00)); |
337 |
assertEquals(createDate(2002, CALENDAR_JANUARY, 1), HSSFDateUtil.getJavaDate(37257.00, false)); |
334 |
assertEquals(createDate(2004, Calendar.MARCH, 28), HSSFDateUtil.getJavaDate(38074.00)); |
338 |
assertEquals(createDate(2004, CALENDAR_MARCH, 28), HSSFDateUtil.getJavaDate(38074.00, false)); |
335 |
} |
339 |
} |
336 |
|
340 |
|
|
|
341 |
public void testDate1904() { |
342 |
assertEquals(createDate(1904, CALENDAR_JANUARY, 2), HSSFDateUtil.getJavaDate(1.0, true)); |
343 |
assertEquals(createDate(1904, CALENDAR_JANUARY, 1), HSSFDateUtil.getJavaDate(0.0, true)); |
344 |
assertEquals(0.0, HSSFDateUtil.getExcelDate(createDate(1904, CALENDAR_JANUARY, 1), true), 0.00001); |
345 |
assertEquals(1.0, HSSFDateUtil.getExcelDate(createDate(1904, CALENDAR_JANUARY, 2), true), 0.00001); |
346 |
|
347 |
assertEquals(createDate(1998, CALENDAR_JULY, 5), HSSFDateUtil.getJavaDate(35981, false)); |
348 |
assertEquals(createDate(1998, CALENDAR_JULY, 5), HSSFDateUtil.getJavaDate(34519, true)); |
349 |
|
350 |
assertEquals(35981.0, HSSFDateUtil.getExcelDate(createDate(1998, CALENDAR_JULY, 5), false), 0.00001); |
351 |
assertEquals(34519.0, HSSFDateUtil.getExcelDate(createDate(1998, CALENDAR_JULY, 5), true), 0.00001); |
352 |
} |
353 |
|
337 |
private Date createDate(int year, int month, int day) { |
354 |
private Date createDate(int year, int month, int day) { |
338 |
Calendar c = new GregorianCalendar(); |
355 |
Calendar c = new GregorianCalendar(); |
339 |
c.set(year, month, day, 0, 0, 0); |
356 |
c.set(year, month, day, 0, 0, 0); |
Lines 341-350
Link Here
|
341 |
return c.getTime(); |
358 |
return c.getTime(); |
342 |
} |
359 |
} |
343 |
|
360 |
|
|
|
361 |
/** |
362 |
* Check if HSSFDateUtil.getAbsoluteDay works as advertised. |
363 |
*/ |
364 |
public void testAbsoluteDay() { |
365 |
// 1 Jan 1900 is 1 day after 31 Dec 1899 |
366 |
GregorianCalendar calendar = new GregorianCalendar(1900, 0, 1); |
367 |
assertEquals("Checking absolute day (1 Jan 1900)", 1, HSSFDateUtil.absoluteDay(calendar, false)); |
368 |
// 1 Jan 1901 is 366 days after 31 Dec 1899 |
369 |
calendar = new GregorianCalendar(1901, 0, 1); |
370 |
assertEquals("Checking absolute day (1 Jan 1901)", 366, HSSFDateUtil.absoluteDay(calendar, false)); |
371 |
} |
372 |
|
344 |
public static void main(String [] args) { |
373 |
public static void main(String [] args) { |
345 |
System.out |
374 |
System.out |
346 |
.println("Testing org.apache.poi.hssf.usermodel.TestHSSFDateUtil"); |
375 |
.println("Testing org.apache.poi.hssf.usermodel.TestHSSFDateUtil"); |
347 |
junit.textui.TestRunner.run(TestHSSFDateUtil.class); |
376 |
junit.textui.TestRunner.run(TestHSSFDateUtil.class); |
348 |
} |
377 |
} |
349 |
} |
378 |
} |
350 |
|
|
|