Al convertir Excel al file .csv, no puedo convertir la date y savela en el file csv.

Estoy usando Apache POI 3.6, estoy tratando de leer datos de Excel y convertir los datos de Excel al file .CVS. Mis datos de Excel estarán en este formatting

  1. La primera columna será: date (8/6/2009)
  2. La 2da columna será: hora (12:00:01 AM)
  3. La tercera columna será: valor 1 (30)
  4. La cuarta columna será: valor 2 (400.99).

Necesito convertir estos datos en este formatting (8-6-2009) y almacenarlos en el file CVS. ERROR: puedo almacenar los datos en el file csv pero no puedo convertir la date y la hora en él. está tomando algunos valores en la columna de date obteniendo 41426, y en la columna de time estoy obteniendo este 3456.0.

No entiendo cómo convertir esto arriba: por favor, que alguien me ayude … 🙁

mi código está aquí:

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Excel { static void xlsx(File inputFile, File outputFile) { // For storing data into CSV files StringBuffer data = new StringBuffer(); try { FileOutputStream fos = new FileOutputStream(outputFile); FileInputStream fio = new FileInputStream(inputFile); // Get the workbook object for XLSX file XSSFWorkbook wBook = new XSSFWorkbook(fio); // Get first sheet from the workbook XSSFSheet sheet = wBook.getSheetAt(0); Row row; Cell cell; // Iterate through each rows from first sheet Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { row = rowIterator.next(); // For each row, iterate through each columns Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: data.append(cell.getBooleanCellValue() + ","); break; case Cell.CELL_TYPE_NUMERIC: if (row.getCell(0).getCellType() == Cell.CELL_TYPE_NUMERIC){ data.append(cell.getNumericCellValue() + ","); } if (DateUtil.isCellDateFormatted(row.getCell(0))) { System.out.println ("Row No.: " + row.getRowNum ()+ " " + row.getCell(0).getDateCellValue()); data.append(row.getCell(0).getDateCellValue() + ","); } break; case Cell.CELL_TYPE_STRING: data.append(cell.getStringCellValue() + ","); break; case Cell.CELL_TYPE_BLANK: data.append("" + ","); break; default: data.append(cell + ","); } }data.append("\r\n"); }//System.out.println(); //System.out.println(data); fos.write(data.toString().getBytes()); fos.close(); } catch (Exception ioe) { ioe.printStackTrace(); } } //testing the application public static void main(String[] args) { //reading file from desktop File inputFile = new File("D:\\project-work\\sampleData.xlsx"); //writing excel data to csv File outputFile = new File("D:\\project-work\\Data.csv"); xlsx(inputFile, outputFile); } 

Si el Excel tiene la celda configurada correctamente como Fecha / Hora, debería poder get la date real a través de

 Date date = cell.getDateCellValue() 

Luego puede usar SimpleDateFormatter o similar para formatearlo de cualquier manera que necesite en su CSV.