JExcelAPI - запись даты в лист Excel игнорирует день, месяц и год - PullRequest
4 голосов
/ 08 июня 2009

Я пытаюсь сгенерировать некоторые листы Excel в приложении Java с помощью JExcelAPI (v. 2.6.3) и не могу правильно сгенерировать ячейки даты Например, для кода:

WritableWorkbook workbook = null;
    workbook = Workbook.createWorkbook(new File("C:\\tmp\\tests.xls"));
    try {
        Date date = new Date();
        final WritableSheet sheet = workbook.createSheet("Sheet", 0);
        DateTime dateTime = new DateTime(0, 0, date);
        sheet.addCell(dateTime);
        System.out.println("Date1 is " + date);
        final Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2007);
        cal.set(Calendar.MONTH, Calendar.OCTOBER);
        cal.set(Calendar.DAY_OF_MONTH, 17);
        cal.set(Calendar.HOUR_OF_DAY, 8);
        cal.set(Calendar.MINUTE, 15);
        date = cal.getTime();
        dateTime = new DateTime(0, 1, date);
        sheet.addCell(dateTime);
        System.out.println("My birthday is on " + date);
    } finally {
        workbook.write();
        workbook.close();
    }

Выход (на консоли):
Дата 1: понедельник, июнь 08 11:14:45 GMT + 01: 00 2009
Мой день рождения в среду 17 октября 08:15:45 GMT + 01: 00 2007

А в файле Excel ячейки
1900-01-00 10: 14: 46
1900-01-00 07: 15: 46

Часть времени в Excel корректируется на UTC, а часть даты отбрасывается. Хотя в ссылке упоминается проблема часового пояса, в ней ничего не говорится об отмене дат. Что я делаю не так?

Ответы [ 2 ]

6 голосов
/ 08 июня 2009

OK. Я понял это. Создание DateFormat

DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss");
WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat); 

и передача его конструктору DateTime

DateTime dateTime = new DateTime(0, 0, date, dateFormat);

исправляет это. Похоже, по умолчанию берется только временная часть. Извините за мою глупость.

0 голосов
/ 08 июня 2009

POI - это не тот ответ, который я бы рекомендовал. JExcel может справиться с этим. Я не вижу, где вы установили тип для этой ячейки. Посмотрите на DateFormats .

Проблема такая же, если вы используете Excel. Если вы введете дату в ячейку, для которой не задан этот формат, у вас будет неожиданное поведение.

...