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 67-76
Link Here
|
67 |
GregorianCalendar date = new GregorianCalendar(2002, 0, 1, |
69 |
GregorianCalendar date = new GregorianCalendar(2002, 0, 1, |
68 |
hour, 1, 1); |
70 |
hour, 1, 1); |
69 |
double excelDate = |
71 |
double excelDate = |
70 |
HSSFDateUtil.getExcelDate(date.getTime()); |
72 |
HSSFDateUtil.getExcelDate(date.getTime(), false); |
71 |
|
73 |
|
72 |
assertEquals("Checking hour = " + hour, date.getTime().getTime(), |
74 |
assertEquals("Checking hour = " + hour, date.getTime().getTime(), |
73 |
HSSFDateUtil.getJavaDate(excelDate).getTime()); |
75 |
HSSFDateUtil.getJavaDate(excelDate, false).getTime()); |
74 |
} |
76 |
} |
75 |
|
77 |
|
76 |
// check 1900 and 1904 date windowing conversions |
78 |
// check 1900 and 1904 date windowing conversions |
Lines 110-116
Link Here
|
110 |
|
112 |
|
111 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
113 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
112 |
Date javaDate = cal.getTime(); |
114 |
Date javaDate = cal.getTime(); |
113 |
double excelDate = HSSFDateUtil.getExcelDate(javaDate); |
115 |
double excelDate = HSSFDateUtil.getExcelDate(javaDate, false); |
114 |
double difference = excelDate - Math.floor(excelDate); |
116 |
double difference = excelDate - Math.floor(excelDate); |
115 |
int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60; |
117 |
int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60; |
116 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
118 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
Lines 118-124
Link Here
|
118 |
differenceInHours); |
120 |
differenceInHours); |
119 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
121 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
120 |
javaDate.getTime(), |
122 |
javaDate.getTime(), |
121 |
HSSFDateUtil.getJavaDate(excelDate).getTime()); |
123 |
HSSFDateUtil.getJavaDate(excelDate, false).getTime()); |
122 |
} |
124 |
} |
123 |
} |
125 |
} |
124 |
|
126 |
|
Lines 130-136
Link Here
|
130 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
132 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
131 |
TimeZone.setDefault(cet); |
133 |
TimeZone.setDefault(cet); |
132 |
Calendar cal = new GregorianCalendar(2004, Calendar.MARCH, 28); |
134 |
Calendar cal = new GregorianCalendar(2004, Calendar.MARCH, 28); |
133 |
double excelDate = HSSFDateUtil.getExcelDate(cal.getTime()); |
135 |
double excelDate = HSSFDateUtil.getExcelDate(cal.getTime(), false); |
134 |
double oneHour = 1.0 / 24; |
136 |
double oneHour = 1.0 / 24; |
135 |
double oneMinute = oneHour / 60; |
137 |
double oneMinute = oneHour / 60; |
136 |
for (int hour = 0; hour < 24; hour++, excelDate += oneHour) { |
138 |
for (int hour = 0; hour < 24; hour++, excelDate += oneHour) { |
Lines 142-151
Link Here
|
142 |
} |
144 |
} |
143 |
|
145 |
|
144 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
146 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
145 |
Date javaDate = HSSFDateUtil.getJavaDate(excelDate); |
147 |
Date javaDate = HSSFDateUtil.getJavaDate(excelDate, false); |
146 |
assertEquals("Checking " + hour + " hours on Daylight Saving Time start date", |
148 |
assertEquals("Checking " + hour + " hours on Daylight Saving Time start date", |
147 |
excelDate, |
149 |
excelDate, |
148 |
HSSFDateUtil.getExcelDate(javaDate), oneMinute); |
150 |
HSSFDateUtil.getExcelDate(javaDate, false), oneMinute); |
149 |
} |
151 |
} |
150 |
} |
152 |
} |
151 |
|
153 |
|
Lines 160-166
Link Here
|
160 |
for (int hour = 0; hour < 24; hour++) { |
162 |
for (int hour = 0; hour < 24; hour++) { |
161 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
163 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
162 |
Date javaDate = cal.getTime(); |
164 |
Date javaDate = cal.getTime(); |
163 |
double excelDate = HSSFDateUtil.getExcelDate(javaDate); |
165 |
double excelDate = HSSFDateUtil.getExcelDate(javaDate, false); |
164 |
double difference = excelDate - Math.floor(excelDate); |
166 |
double difference = excelDate - Math.floor(excelDate); |
165 |
int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60; |
167 |
int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60; |
166 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time end date", |
168 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time end date", |
Lines 168-174
Link Here
|
168 |
differenceInHours); |
170 |
differenceInHours); |
169 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
171 |
assertEquals("Checking " + hour + " hour on Daylight Saving Time start date", |
170 |
javaDate.getTime(), |
172 |
javaDate.getTime(), |
171 |
HSSFDateUtil.getJavaDate(excelDate).getTime()); |
173 |
HSSFDateUtil.getJavaDate(excelDate, false).getTime()); |
172 |
} |
174 |
} |
173 |
} |
175 |
} |
174 |
|
176 |
|
Lines 180-194
Link Here
|
180 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
182 |
TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen"); |
181 |
TimeZone.setDefault(cet); |
183 |
TimeZone.setDefault(cet); |
182 |
Calendar cal = new GregorianCalendar(2004, Calendar.OCTOBER, 31); |
184 |
Calendar cal = new GregorianCalendar(2004, Calendar.OCTOBER, 31); |
183 |
double excelDate = HSSFDateUtil.getExcelDate(cal.getTime()); |
185 |
double excelDate = HSSFDateUtil.getExcelDate(cal.getTime(), false); |
184 |
double oneHour = 1.0 / 24; |
186 |
double oneHour = 1.0 / 24; |
185 |
double oneMinute = oneHour / 60; |
187 |
double oneMinute = oneHour / 60; |
186 |
for (int hour = 0; hour < 24; hour++, excelDate += oneHour) { |
188 |
for (int hour = 0; hour < 24; hour++, excelDate += oneHour) { |
187 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
189 |
cal.set(Calendar.HOUR_OF_DAY, hour); |
188 |
Date javaDate = HSSFDateUtil.getJavaDate(excelDate); |
190 |
Date javaDate = HSSFDateUtil.getJavaDate(excelDate, false); |
189 |
assertEquals("Checking " + hour + " hours on Daylight Saving Time start date", |
191 |
assertEquals("Checking " + hour + " hours on Daylight Saving Time start date", |
190 |
excelDate, |
192 |
excelDate, |
191 |
HSSFDateUtil.getExcelDate(javaDate), oneMinute); |
193 |
HSSFDateUtil.getExcelDate(javaDate, false), oneMinute); |
192 |
} |
194 |
} |
193 |
} |
195 |
} |
194 |
|
196 |
|
Lines 315-337
Link Here
|
315 |
} |
317 |
} |
316 |
|
318 |
|
317 |
public void testDateBug_2Excel() { |
319 |
public void testDateBug_2Excel() { |
318 |
assertEquals(59.0, HSSFDateUtil.getExcelDate(createDate(1900, CALENDAR_FEBRUARY, 28)), 0.00001); |
320 |
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); |
321 |
assertEquals(61.0, HSSFDateUtil.getExcelDate(createDate(1900, CALENDAR_MARCH, 1), false), 0.00001); |
320 |
|
322 |
|
321 |
assertEquals(37315.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_FEBRUARY, 28)), 0.00001); |
323 |
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); |
324 |
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); |
325 |
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); |
326 |
assertEquals(38074.00, HSSFDateUtil.getExcelDate(createDate(2004, CALENDAR_MARCH, 28), false), 0.00001); |
325 |
} |
327 |
} |
326 |
|
328 |
|
327 |
public void testDateBug_2Java() { |
329 |
public void testDateBug_2Java() { |
328 |
assertEquals(createDate(1900, Calendar.FEBRUARY, 28), HSSFDateUtil.getJavaDate(59.0)); |
330 |
assertEquals(createDate(1900, Calendar.FEBRUARY, 28), HSSFDateUtil.getJavaDate(59.0, false)); |
329 |
assertEquals(createDate(1900, Calendar.MARCH, 1), HSSFDateUtil.getJavaDate(61.0)); |
331 |
assertEquals(createDate(1900, Calendar.MARCH, 1), HSSFDateUtil.getJavaDate(61.0, false)); |
330 |
|
332 |
|
331 |
assertEquals(createDate(2002, Calendar.FEBRUARY, 28), HSSFDateUtil.getJavaDate(37315.00)); |
333 |
assertEquals(createDate(2002, Calendar.FEBRUARY, 28), HSSFDateUtil.getJavaDate(37315.00, false)); |
332 |
assertEquals(createDate(2002, Calendar.MARCH, 1), HSSFDateUtil.getJavaDate(37316.00)); |
334 |
assertEquals(createDate(2002, Calendar.MARCH, 1), HSSFDateUtil.getJavaDate(37316.00, false)); |
333 |
assertEquals(createDate(2002, Calendar.JANUARY, 1), HSSFDateUtil.getJavaDate(37257.00)); |
335 |
assertEquals(createDate(2002, Calendar.JANUARY, 1), HSSFDateUtil.getJavaDate(37257.00, false)); |
334 |
assertEquals(createDate(2004, Calendar.MARCH, 28), HSSFDateUtil.getJavaDate(38074.00)); |
336 |
assertEquals(createDate(2004, Calendar.MARCH, 28), HSSFDateUtil.getJavaDate(38074.00, false)); |
335 |
} |
337 |
} |
336 |
|
338 |
|
337 |
private Date createDate(int year, int month, int day) { |
339 |
private Date createDate(int year, int month, int day) { |
Lines 341-350
Link Here
|
341 |
return c.getTime(); |
343 |
return c.getTime(); |
342 |
} |
344 |
} |
343 |
|
345 |
|
|
|
346 |
/** |
347 |
* Check if HSSFDateUtil.getAbsoluteDay works as advertised. |
348 |
*/ |
349 |
public void testAbsoluteDay() { |
350 |
// 1 Jan 1900 is 1 day after 31 Dec 1899 |
351 |
GregorianCalendar calendar = new GregorianCalendar(1900, 0, 1); |
352 |
assertEquals("Checking absolute day (1 Jan 1900)", 1, HSSFDateUtil.absoluteDay(calendar, false)); |
353 |
// 1 Jan 1901 is 366 days after 31 Dec 1899 |
354 |
calendar = new GregorianCalendar(1901, 0, 1); |
355 |
assertEquals("Checking absolute day (1 Jan 1901)", 366, HSSFDateUtil.absoluteDay(calendar, false)); |
356 |
} |
357 |
|
344 |
public static void main(String [] args) { |
358 |
public static void main(String [] args) { |
345 |
System.out |
359 |
System.out |
346 |
.println("Testing org.apache.poi.hssf.usermodel.TestHSSFDateUtil"); |
360 |
.println("Testing org.apache.poi.hssf.usermodel.TestHSSFDateUtil"); |
347 |
junit.textui.TestRunner.run(TestHSSFDateUtil.class); |
361 |
junit.textui.TestRunner.run(TestHSSFDateUtil.class); |
348 |
} |
362 |
} |
349 |
} |
363 |
} |
350 |
|
|
|