Как разобрать строку методом parse() класса SimpleDateFormat, чтобы получить разные форматы при чтении ячеек Excel c помощью библиотеки POI?

Пробую прочитать столбец в документе Excel и добавить прочитанное в список. Чтение формата даты пробую реализовать классом SimpleDateFormat, но требуется прочесть колонку с датой определенного формата и временем определенного формата, только не получается добиться данного результата, не понятно почему выкидывает

java.text.ParseException: Unparseable date: "dd.MM.yyyy"
    at java.text.DateFormat.parse(DateFormat.java:366)
    at ru.app.doc.ReadExcelData.extractExcelContentByColumnIndex(ReadExcelData.java:73)
    at ru.app.doc.ReadExcelData.main(ReadExcelData.java:43)

Может кто нибудь подсказать в чем дело и как это реализовать?

switch (cell.getCellType()) {
    case Cell.CELL_TYPE_NUMERIC:
        String date = "dd.MM.yyyy";
        String time = "HH:mm";
        if (DateUtil.isCellDateFormatted(cell)) {
            // получение формата даты
            SimpleDateFormat sdfDate = new SimpleDateFormat(date);
            sdfDate.parse(date);
            columndata.add(sdfDate.format(cell.getDateCellValue()));
            // получение формата времени
            SimpleDateFormat sdfTime = new SimpleDateFormat(time, Locale.UK);
            sdfTime.parse(time);
            columndata.add(sdfTime.format(cell.getDateCellValue()));
        } else {
            columndata.add((int) cell.getNumericCellValue() + "");
        }
        break;
    case Cell.CELL_TYPE_STRING:
        columndata.add(cell.getStringCellValue());
        break;
}

Ответы (1 шт):

Автор решения: Alexander Ivanov

В метод SingleDateFormat.parse нужно передавать строку, представляющую дату, например 25.10.2020. Тогда он вернёт объект типа java.util.Date

Но, мне кажется, что Вам его вызывать вовсе не нужно. Ведь задача в том, чтобы получить строку из объекта типа Date. А она решается вызовом метода SingleDateFormat.format.

Просто удалите строчки с вызовом метода SingleDateFormat.parse

Если хочется формировать только время для ячеек, в которых нет даты, нужно понять, какую строку возвращает sdfDate.format() для таких ячеек. После этого сравнивать результат sdfDate.format() с этой строкой.

→ Ссылка