La guía paso a paso o código que verás en este artículo es la resolución más eficiente y efectiva que hallamos a esta duda o problema.
Solución:
NOTA: HSSFDateUtil está en desuso
Si sabe qué celda, es decir, la posición de la columna, digamos 0 en cada fila, será una fecha, puede ir a
row.getCell(0).getDateCellValue()
directamente.
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue()
ACTUALIZACIÓN: aquí hay un ejemplo: puede aplicar esto en el código de su caso de cambio anterior. Estoy comprobando e imprimiendo el valor numérico y de fecha. En este caso, la primera columna de mi hoja tiene fechas, por lo que uso row.getCell(0).
Puedes usar el if (HSSFDateUtil.isCellDateFormatted ..
bloque de código directamente en la caja de su interruptor.
if (row.getCell(0).getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
System.out.println ("Row No.: " + row.getRowNum ()+ " " +
row.getCell(0).getNumericCellValue());
if (HSSFDateUtil.isCellDateFormatted(row.getCell(0)))
System.out.println ("Row No.: " + row.getRowNum ()+ " " +
row.getCell(0).getDateCellValue());
}
la salida es
Row No.: 0 39281.0
Row No.: 0 Wed Jul 18 00:00:00 IST 2007
Row No.: 1 39491.0
Row No.: 1 Wed Feb 13 00:00:00 IST 2008
Row No.: 2 39311.0
Row No.: 2 Fri Aug 17 00:00:00 IST 2007
Sí, entendí tu problema. Si es difícil de identificar, la celda tiene un valor numérico o de datos.
Si desea datos en el formato que se muestra en Excel, solo necesita formatear la celda usando la clase DataFormatter.
DataFormatter dataFormatter = new DataFormatter();
String cellStringValue = dataFormatter.formatCellValue(row.getCell(0));
System.out.println ("Is shows data as show in Excel file" + cellStringValue); // Here it automcatically format data based on that cell format.
// No need for extra efforts
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
if(cell.getCellTypeEnum() == CellType.NUMERIC||cell.getCellTypeEnum() == CellType.FORMULA)
String cellValue=String.valueOf(cell.getNumericCellValue());
if(HSSFDateUtil.isCellDateFormatted(cell))
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Date date = cell.getDateCellValue();
cellValue = df.format(date);
System.out.println(cellValue);
Recuerda que tienes concesión de interpretar si te fue preciso.