123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
-
- package org.apache.poi.hssf.usermodel;
-
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertFalse;
- import static org.junit.Assert.assertTrue;
-
- import java.io.IOException;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.GregorianCalendar;
- import java.util.TimeZone;
-
- import org.apache.poi.hssf.HSSFTestDataSamples;
- import org.apache.poi.hssf.model.InternalWorkbook;
- import org.apache.poi.ss.usermodel.DateUtil;
- import org.junit.Test;
-
- /**
- * Class TestHSSFDateUtil
- *
- *
- * @author Dan Sherman (dsherman at isisph.com)
- * @author Hack Kampbjorn (hak at 2mba.dk)
- * @author Pavel Krupets (pkrupets at palmtreebusiness dot com)
- * @author Alex Jacoby (ajacoby at gmail.com)
- * @version %I%, %G%
- */
- public final class TestHSSFDateUtil {
-
- public static final int CALENDAR_JANUARY = 0;
- public static final int CALENDAR_FEBRUARY = 1;
- public static final int CALENDAR_MARCH = 2;
- public static final int CALENDAR_APRIL = 3;
- public static final int CALENDAR_JULY = 6;
- public static final int CALENDAR_OCTOBER = 9;
-
- /**
- * Checks the date conversion functions in the HSSFDateUtil class.
- */
- @Test
- public void dateConversion() {
-
- // Iteratating over the hours exposes any rounding issues.
- for (int hour = 0; hour < 23; hour++)
- {
- GregorianCalendar date = new GregorianCalendar(2002, 0, 1,
- hour, 1, 1);
- double excelDate =
- HSSFDateUtil.getExcelDate(date.getTime(), false);
-
- assertEquals("Checking hour = " + hour, date.getTime().getTime(),
- HSSFDateUtil.getJavaDate(excelDate, false).getTime());
- }
-
- // check 1900 and 1904 date windowing conversions
- double excelDate = 36526.0;
- // with 1900 windowing, excelDate is Jan. 1, 2000
- // with 1904 windowing, excelDate is Jan. 2, 2004
- GregorianCalendar cal = new GregorianCalendar(2000,0,1); // Jan. 1, 2000
- Date dateIf1900 = cal.getTime();
- cal.add(GregorianCalendar.YEAR,4); // now Jan. 1, 2004
- cal.add(GregorianCalendar.DATE,1); // now Jan. 2, 2004
- Date dateIf1904 = cal.getTime();
- // 1900 windowing
- assertEquals("Checking 1900 Date Windowing",
- dateIf1900.getTime(),
- HSSFDateUtil.getJavaDate(excelDate,false).getTime());
- // 1904 windowing
- assertEquals("Checking 1904 Date Windowing",
- dateIf1904.getTime(),
- HSSFDateUtil.getJavaDate(excelDate,true).getTime());
- }
-
- /**
- * Checks the conversion of a java.util.date to Excel on a day when
- * Daylight Saving Time starts.
- */
- @Test
- public void excelConversionOnDSTStart() {
- TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen");
- TimeZone.setDefault(cet);
- Calendar cal = new GregorianCalendar(2004, CALENDAR_MARCH, 28);
- for (int hour = 0; hour < 24; hour++) {
-
- // Skip 02:00 CET as that is the Daylight change time
- // and Java converts it automatically to 03:00 CEST
- if (hour == 2) {
- continue;
- }
-
- cal.set(Calendar.HOUR_OF_DAY, hour);
- Date javaDate = cal.getTime();
- double excelDate = HSSFDateUtil.getExcelDate(javaDate, false);
- double difference = excelDate - Math.floor(excelDate);
- int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60;
- assertEquals("Checking " + hour + " hour on Daylight Saving Time start date",
- hour,
- differenceInHours);
- assertEquals("Checking " + hour + " hour on Daylight Saving Time start date",
- javaDate.getTime(),
- HSSFDateUtil.getJavaDate(excelDate, false).getTime());
- }
- }
-
- /**
- * Checks the conversion of an Excel date to a java.util.date on a day when
- * Daylight Saving Time starts.
- */
- @Test
- public void javaConversionOnDSTStart() {
- TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen");
- TimeZone.setDefault(cet);
- Calendar cal = new GregorianCalendar(2004, CALENDAR_MARCH, 28);
- double excelDate = HSSFDateUtil.getExcelDate(cal.getTime(), false);
- double oneHour = 1.0 / 24;
- double oneMinute = oneHour / 60;
- for (int hour = 0; hour < 24; hour++, excelDate += oneHour) {
-
- // Skip 02:00 CET as that is the Daylight change time
- // and Java converts it automatically to 03:00 CEST
- if (hour == 2) {
- continue;
- }
-
- cal.set(Calendar.HOUR_OF_DAY, hour);
- Date javaDate = HSSFDateUtil.getJavaDate(excelDate, false);
- assertEquals("Checking " + hour + " hours on Daylight Saving Time start date",
- excelDate,
- HSSFDateUtil.getExcelDate(javaDate, false), oneMinute);
- }
- }
-
- /**
- * Checks the conversion of a java.util.Date to Excel on a day when
- * Daylight Saving Time ends.
- */
- @Test
- public void excelConversionOnDSTEnd() {
- TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen");
- TimeZone.setDefault(cet);
- Calendar cal = new GregorianCalendar(2004, CALENDAR_OCTOBER, 31);
- for (int hour = 0; hour < 24; hour++) {
- cal.set(Calendar.HOUR_OF_DAY, hour);
- Date javaDate = cal.getTime();
- double excelDate = HSSFDateUtil.getExcelDate(javaDate, false);
- double difference = excelDate - Math.floor(excelDate);
- int differenceInHours = (int) (difference * 24 * 60 + 0.5) / 60;
- assertEquals("Checking " + hour + " hour on Daylight Saving Time end date",
- hour,
- differenceInHours);
- assertEquals("Checking " + hour + " hour on Daylight Saving Time start date",
- javaDate.getTime(),
- HSSFDateUtil.getJavaDate(excelDate, false).getTime());
- }
- }
-
- /**
- * Checks the conversion of an Excel date to java.util.Date on a day when
- * Daylight Saving Time ends.
- */
- @Test
- public void javaConversionOnDSTEnd() {
- TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen");
- TimeZone.setDefault(cet);
- Calendar cal = new GregorianCalendar(2004, CALENDAR_OCTOBER, 31);
- double excelDate = HSSFDateUtil.getExcelDate(cal.getTime(), false);
- double oneHour = 1.0 / 24;
- double oneMinute = oneHour / 60;
- for (int hour = 0; hour < 24; hour++, excelDate += oneHour) {
- cal.set(Calendar.HOUR_OF_DAY, hour);
- Date javaDate = HSSFDateUtil.getJavaDate(excelDate, false);
- assertEquals("Checking " + hour + " hours on Daylight Saving Time start date",
- excelDate,
- HSSFDateUtil.getExcelDate(javaDate, false), oneMinute);
- }
- }
-
- /**
- * Tests that we deal with time-zones properly
- */
- @Test
- public void calendarConversion() {
- GregorianCalendar date = new GregorianCalendar(2002, 0, 1, 12, 1, 1);
- Date expected = date.getTime();
-
- // Iterating over the hours exposes any rounding issues.
- for (int hour = -12; hour <= 12; hour++)
- {
- String id = "GMT" + (hour < 0 ? "" : "+") + hour + ":00";
- date.setTimeZone(TimeZone.getTimeZone(id));
- date.set(Calendar.HOUR_OF_DAY, 12);
- double excelDate = HSSFDateUtil.getExcelDate(date, false);
- Date javaDate = HSSFDateUtil.getJavaDate(excelDate);
-
- // Should match despite time-zone
- assertEquals("Checking timezone " + id, expected.getTime(), javaDate.getTime());
- }
-
- // Check that the timezone aware getter works correctly
- TimeZone cet = TimeZone.getTimeZone("Europe/Copenhagen");
- TimeZone ldn = TimeZone.getTimeZone("Europe/London");
- TimeZone.setDefault(cet);
-
- // 12:45 on 27th April 2012
- double excelDate = 41026.53125;
-
- // Same, no change
- assertEquals(
- HSSFDateUtil.getJavaDate(excelDate, false).getTime(),
- HSSFDateUtil.getJavaDate(excelDate, false, cet).getTime()
- );
-
- // London vs Copenhagen, should differ by an hour
- Date cetDate = HSSFDateUtil.getJavaDate(excelDate, false);
- Date ldnDate = HSSFDateUtil.getJavaDate(excelDate, false, ldn);
- assertEquals(ldnDate.getTime() - cetDate.getTime(), 60*60*1000);
- }
-
- /**
- * Tests that we correctly detect date formats as such
- */
- @Test
- public void identifyDateFormats() {
- // First up, try with a few built in date formats
- short[] builtins = new short[] { 0x0e, 0x0f, 0x10, 0x16, 0x2d, 0x2e };
- for(int i=0; i<builtins.length; i++) {
- String formatStr = HSSFDataFormat.getBuiltinFormat(builtins[i]);
- assertTrue( HSSFDateUtil.isInternalDateFormat(builtins[i]) );
- assertTrue( HSSFDateUtil.isADateFormat(builtins[i],formatStr) );
- }
-
- // Now try a few built-in non date formats
- builtins = new short[] { 0x01, 0x02, 0x17, 0x1f, 0x30 };
- for(int i=0; i<builtins.length; i++) {
- String formatStr = HSSFDataFormat.getBuiltinFormat(builtins[i]);
- assertFalse( HSSFDateUtil.isInternalDateFormat(builtins[i]) );
- assertFalse( HSSFDateUtil.isADateFormat(builtins[i],formatStr) );
- }
-
- // Now for some non-internal ones
- // These come after the real ones
- int numBuiltins = HSSFDataFormat.getNumberOfBuiltinBuiltinFormats();
- assertTrue(numBuiltins < 60);
- short formatId = 60;
- assertFalse( HSSFDateUtil.isInternalDateFormat(formatId) );
-
- // Valid ones first
- String[] formats = new String[] {
- "yyyy-mm-dd", "yyyy/mm/dd", "yy/mm/dd", "yy/mmm/dd",
- "dd/mm/yy", "dd/mm/yyyy", "dd/mmm/yy",
- "dd-mm-yy", "dd-mm-yyyy",
- "DD-MM-YY", "DD-mm-YYYY",
- "dd\\-mm\\-yy", // Sometimes escaped
- "dd.mm.yyyy", "dd\\.mm\\.yyyy",
- "dd\\ mm\\.yyyy AM", "dd\\ mm\\.yyyy pm",
- "dd\\ mm\\.yyyy\\-dd", "[h]:mm:ss",
- "mm/dd/yy", "\"mm\"/\"dd\"/\"yy\"",
- "m\\/d\\/yyyy",
-
- // These crazy ones are valid
- "yyyy-mm-dd;@", "yyyy/mm/dd;@",
- "dd-mm-yy;@", "dd-mm-yyyy;@",
- // These even crazier ones are also valid
- // (who knows what they mean though...)
- "[$-F800]dddd\\,\\ mmm\\ dd\\,\\ yyyy",
- "[$-F900]ddd/mm/yyy",
- // These ones specify colours, who knew that was allowed?
- "[BLACK]dddd/mm/yy",
- "[yeLLow]yyyy-mm-dd"
- };
- for(int i=0; i<formats.length; i++) {
- assertTrue(
- formats[i] + " is a date format",
- HSSFDateUtil.isADateFormat(formatId, formats[i])
- );
- }
-
- // Then time based ones too
- formats = new String[] {
- "yyyy-mm-dd hh:mm:ss", "yyyy/mm/dd HH:MM:SS",
- "mm/dd HH:MM", "yy/mmm/dd SS",
- "mm/dd HH:MM AM", "mm/dd HH:MM am",
- "mm/dd HH:MM PM", "mm/dd HH:MM pm",
- "m/d/yy h:mm AM/PM",
- "hh:mm:ss", "hh:mm:ss.0", "mm:ss.0",
- //support elapsed time [h],[m],[s]
- "[hh]", "[mm]", "[ss]", "[SS]", "[red][hh]"
- };
- for(int i=0; i<formats.length; i++) {
- assertTrue(
- formats[i] + " is a datetime format",
- HSSFDateUtil.isADateFormat(formatId, formats[i])
- );
- }
-
- // Then invalid ones
- formats = new String[] {
- "yyyy*mm*dd",
- "0.0", "0.000",
- "0%", "0.0%",
- "[]Foo", "[BLACK]0.00%",
- "[ms]", "[Mh]",
- "", null
- };
- for(int i=0; i<formats.length; i++) {
- assertFalse(
- formats[i] + " is not a date or datetime format",
- HSSFDateUtil.isADateFormat(formatId, formats[i])
- );
- }
-
- // And these are ones we probably shouldn't allow,
- // but would need a better regexp
- formats = new String[] {
- "yyyy:mm:dd",
- };
- for(int i=0; i<formats.length; i++) {
- // assertFalse( HSSFDateUtil.isADateFormat(formatId, formats[i]) );
- }
- }
-
- /**
- * Test that against a real, test file, we still do everything
- * correctly
- * @throws IOException
- */
- @Test
- public void onARealFile() throws IOException {
-
- HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("DateFormats.xls");
- HSSFSheet sheet = workbook.getSheetAt(0);
- InternalWorkbook wb = workbook.getWorkbook();
-
- HSSFRow row;
- HSSFCell cell;
- HSSFCellStyle style;
-
- double aug_10_2007 = 39304.0;
-
- // Should have dates in 2nd column
- // All of them are the 10th of August
- // 2 US dates, 3 UK dates
- row = sheet.getRow(0);
- cell = row.getCell(1);
- style = cell.getCellStyle();
- assertEquals(aug_10_2007, cell.getNumericCellValue(), 0.0001);
- assertEquals("d-mmm-yy", style.getDataFormatString());
- assertTrue(HSSFDateUtil.isInternalDateFormat(style.getDataFormat()));
- assertTrue(HSSFDateUtil.isADateFormat(style.getDataFormat(), style.getDataFormatString()));
- assertTrue(HSSFDateUtil.isCellDateFormatted(cell));
-
- row = sheet.getRow(1);
- cell = row.getCell(1);
- style = cell.getCellStyle();
- assertEquals(aug_10_2007, cell.getNumericCellValue(), 0.0001);
- assertFalse(HSSFDateUtil.isInternalDateFormat(cell.getCellStyle().getDataFormat()));
- assertTrue(HSSFDateUtil.isADateFormat(style.getDataFormat(), style.getDataFormatString()));
- assertTrue(HSSFDateUtil.isCellDateFormatted(cell));
-
- row = sheet.getRow(2);
- cell = row.getCell(1);
- style = cell.getCellStyle();
- assertEquals(aug_10_2007, cell.getNumericCellValue(), 0.0001);
- assertTrue(HSSFDateUtil.isInternalDateFormat(cell.getCellStyle().getDataFormat()));
- assertTrue(HSSFDateUtil.isADateFormat(style.getDataFormat(), style.getDataFormatString()));
- assertTrue(HSSFDateUtil.isCellDateFormatted(cell));
-
- row = sheet.getRow(3);
- cell = row.getCell(1);
- style = cell.getCellStyle();
- assertEquals(aug_10_2007, cell.getNumericCellValue(), 0.0001);
- assertFalse(HSSFDateUtil.isInternalDateFormat(cell.getCellStyle().getDataFormat()));
- assertTrue(HSSFDateUtil.isADateFormat(style.getDataFormat(), style.getDataFormatString()));
- assertTrue(HSSFDateUtil.isCellDateFormatted(cell));
-
- row = sheet.getRow(4);
- cell = row.getCell(1);
- style = cell.getCellStyle();
- assertEquals(aug_10_2007, cell.getNumericCellValue(), 0.0001);
- assertFalse(HSSFDateUtil.isInternalDateFormat(cell.getCellStyle().getDataFormat()));
- assertTrue(HSSFDateUtil.isADateFormat(style.getDataFormat(), style.getDataFormatString()));
- assertTrue(HSSFDateUtil.isCellDateFormatted(cell));
-
- workbook.close();
- }
-
- @Test
- public void excelDateBorderCases() throws ParseException {
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-
- assertEquals(1.0, DateUtil.getExcelDate(df.parse("1900-01-01")), 0.00001);
- assertEquals(31.0, DateUtil.getExcelDate(df.parse("1900-01-31")), 0.00001);
- assertEquals(32.0, DateUtil.getExcelDate(df.parse("1900-02-01")), 0.00001);
- assertEquals(/* BAD_DATE! */ -1.0, DateUtil.getExcelDate(df.parse("1899-12-31")), 0.00001);
- }
-
- @Test
- public void dateBug_2Excel() {
- assertEquals(59.0, HSSFDateUtil.getExcelDate(createDate(1900, CALENDAR_FEBRUARY, 28), false), 0.00001);
- assertEquals(61.0, HSSFDateUtil.getExcelDate(createDate(1900, CALENDAR_MARCH, 1), false), 0.00001);
-
- assertEquals(37315.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_FEBRUARY, 28), false), 0.00001);
- assertEquals(37316.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_MARCH, 1), false), 0.00001);
- assertEquals(37257.00, HSSFDateUtil.getExcelDate(createDate(2002, CALENDAR_JANUARY, 1), false), 0.00001);
- assertEquals(38074.00, HSSFDateUtil.getExcelDate(createDate(2004, CALENDAR_MARCH, 28), false), 0.00001);
- }
-
- @Test
- public void dateBug_2Java() {
- assertEquals(createDate(1900, CALENDAR_FEBRUARY, 28), HSSFDateUtil.getJavaDate(59.0, false));
- assertEquals(createDate(1900, CALENDAR_MARCH, 1), HSSFDateUtil.getJavaDate(61.0, false));
-
- assertEquals(createDate(2002, CALENDAR_FEBRUARY, 28), HSSFDateUtil.getJavaDate(37315.00, false));
- assertEquals(createDate(2002, CALENDAR_MARCH, 1), HSSFDateUtil.getJavaDate(37316.00, false));
- assertEquals(createDate(2002, CALENDAR_JANUARY, 1), HSSFDateUtil.getJavaDate(37257.00, false));
- assertEquals(createDate(2004, CALENDAR_MARCH, 28), HSSFDateUtil.getJavaDate(38074.00, false));
- }
-
- @Test
- public void date1904() {
- assertEquals(createDate(1904, CALENDAR_JANUARY, 2), HSSFDateUtil.getJavaDate(1.0, true));
- assertEquals(createDate(1904, CALENDAR_JANUARY, 1), HSSFDateUtil.getJavaDate(0.0, true));
- assertEquals(0.0, HSSFDateUtil.getExcelDate(createDate(1904, CALENDAR_JANUARY, 1), true), 0.00001);
- assertEquals(1.0, HSSFDateUtil.getExcelDate(createDate(1904, CALENDAR_JANUARY, 2), true), 0.00001);
-
- assertEquals(createDate(1998, CALENDAR_JULY, 5), HSSFDateUtil.getJavaDate(35981, false));
- assertEquals(createDate(1998, CALENDAR_JULY, 5), HSSFDateUtil.getJavaDate(34519, true));
-
- assertEquals(35981.0, HSSFDateUtil.getExcelDate(createDate(1998, CALENDAR_JULY, 5), false), 0.00001);
- assertEquals(34519.0, HSSFDateUtil.getExcelDate(createDate(1998, CALENDAR_JULY, 5), true), 0.00001);
- }
-
- /**
- * @param month zero based
- * @param day one based
- */
- private static Date createDate(int year, int month, int day) {
- return createDate(year, month, day, 0, 0, 0);
- }
-
- /**
- * @param month zero based
- * @param day one based
- */
- private static Date createDate(int year, int month, int day, int hour, int minute, int second) {
- Calendar c = new GregorianCalendar();
- c.set(year, month, day, hour, minute, second);
- c.set(Calendar.MILLISECOND, 0);
- return c.getTime();
- }
-
- /**
- * Check if HSSFDateUtil.getAbsoluteDay works as advertised.
- */
- @Test
- public void absoluteDay() {
- // 1 Jan 1900 is 1 day after 31 Dec 1899
- GregorianCalendar calendar = new GregorianCalendar(1900, 0, 1);
- assertEquals("Checking absolute day (1 Jan 1900)", 1, HSSFDateUtil.absoluteDay(calendar, false));
- // 1 Jan 1901 is 366 days after 31 Dec 1899
- calendar = new GregorianCalendar(1901, 0, 1);
- assertEquals("Checking absolute day (1 Jan 1901)", 366, HSSFDateUtil.absoluteDay(calendar, false));
- }
-
- @Test
- public void convertTime() {
-
- final double delta = 1E-7; // a couple of digits more accuracy than strictly required
- assertEquals(0.5, HSSFDateUtil.convertTime("12:00"), delta);
- assertEquals(2.0/3, HSSFDateUtil.convertTime("16:00"), delta);
- assertEquals(0.0000116, HSSFDateUtil.convertTime("0:00:01"), delta);
- assertEquals(0.7330440, HSSFDateUtil.convertTime("17:35:35"), delta);
- }
-
- @Test
- public void parseDate() {
- assertEquals(createDate(2008, Calendar.AUGUST, 3), HSSFDateUtil.parseYYYYMMDDDate("2008/08/03"));
- assertEquals(createDate(1994, Calendar.MAY, 1), HSSFDateUtil.parseYYYYMMDDDate("1994/05/01"));
- }
-
- /**
- * Ensure that date values *with* a fractional portion get the right time of day
- */
- @Test
- public void convertDateTime() {
- // Excel day 30000 is date 18-Feb-1982
- // 0.7 corresponds to time 16:48:00
- Date actual = HSSFDateUtil.getJavaDate(30000.7);
- Date expected = createDate(1982, 1, 18, 16, 48, 0);
- assertEquals(expected, actual);
- }
-
- /**
- * User reported a datetime issue in POI-2.5:
- * Setting Cell's value to Jan 1, 1900 without a time doesn't return the same value set to
- * @throws IOException
- */
- @Test
- public void bug19172() throws IOException
- {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet sheet = workbook.createSheet();
- HSSFCell cell = sheet.createRow(0).createCell(0);
-
- Calendar cal = Calendar.getInstance();
-
- // A pseudo special Excel dates
- cal.set(1900, 0, 1);
-
- Date valueToTest = cal.getTime();
-
- cell.setCellValue(valueToTest);
-
- Date returnedValue = cell.getDateCellValue();
-
- assertEquals(valueToTest.getTime(), returnedValue.getTime());
-
- workbook.close();
- }
-
- /**
- * DateUtil.isCellFormatted(Cell) should not true for a numeric cell
- * that's formatted as ".0000"
- */
- @Test
- public void bug54557() throws Exception {
- final String format = ".0000";
- boolean isDateFormat = HSSFDateUtil.isADateFormat(165, format);
-
- assertEquals(false, isDateFormat);
- }
-
- @Test
- public void bug56269() throws Exception {
- double excelFraction = 41642.45833321759d;
- Calendar calNoRound = HSSFDateUtil.getJavaCalendar(excelFraction, false);
- assertEquals(10, calNoRound.get(Calendar.HOUR));
- assertEquals(59, calNoRound.get(Calendar.MINUTE));
- assertEquals(59, calNoRound.get(Calendar.SECOND));
- Calendar calRound = HSSFDateUtil.getJavaCalendar(excelFraction, false, null, true);
- assertEquals(11, calRound.get(Calendar.HOUR));
- assertEquals(0, calRound.get(Calendar.MINUTE));
- assertEquals(0, calRound.get(Calendar.SECOND));
- }
- }
|