将 excel 日期转换为 mm/dd/yyyy 格式

converting excel date into mm/dd/yyyy format

我正在使用 poi jar 从 excel sheet 中读取,其中有一个日期 column.If 我打印出数据 cloumn 的值:

cell.getDateCellValue()

它给了我 3124.0 这样的价值

所以我尝试使用此代码转换为 mm/dd/yyyy 格式:

SimpleDateFormat sdf = new SimpleDateFormat("MM/DD/YYYY");
String  s =  sdf.format(cell.getDateCellValue());
System.out.println(s);

但是为了读取日期 06/30/2001,我得到了这个值作为输出:

06/181/2001

首先检查你的日期格式

  SimpleDateFormat sdf = new SimpleDateFormat("MM/DD/YYYY");

应该是

 SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

并检查 POI API 有关处理日期的更多信息 excel,有更好的方法来处理日期。

参考HSSFDateUtil

检查HSSFDateUtil.isCellDateFormatted(),获取Excel日期,获取Java日期

获取Java日期

public static java.util.Date getJavaDate(双日期)

给定一个使用 1900 日期窗口的 Excel 日期,并将其转换为 java.util.Date。

注意:如果 Java 中的默认时区使用夏令时,则转换回 Excel 日期可能不会给出相同的值,即比较 excel 日期== getExcelDate(getJavaDate(excelDate,false)) 并不总是正确的。例如,如果默认时区是 Europe/Copenhagen,则在 2004-03-28,01:59 CET 之后的分钟是 03:00 CEST,如果 excel 日期表示 [=45] 之间的时间=] 和 03:00 然后它被转换为过去的 03:00 夏令时 参数:

日期 - Excel 日期。 Returns: Java 日期的表示,如果日期不是有效的 Excel 日期

,则为 null

另请参阅: 时区

另请参考Reading date values from excel cell using POI HSSF API

查看 java.text.SimpleDateFormat 的 JavaDoc:

D 代表一年中的第几天

Y 表示一年中的第几周。

您可能希望对 d 月中的日期和 y

使用小写变体

您的日期格式字符串有误。应该像下面

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

阅读 Java 文档 SimpleDateFormat

你想写 "MM/dd/yyyy" 作为你的日期格式。大写 DD 表示一年中的第几天,6 月 30 日是 181。

我强烈建议阅读 JavaDoc for the SimpleDateFormat class

日期实际存储为单元格中的数字。

CellType cellType = cell.getCellType();
if (cellType == CellType.NUMERIC) {
     double numberValue = cell.getNumericCellValue();
 
     if (DateUtil.isCellDateFormatted(cell)) {
         Date javaDate= DateUtil.getJavaDate(numberValue);
         //use DateFormat or as it is
         myObj.setValueFromCell(javaDate);
      } else {
         // Use BigDecimal to avoid  Scientific numbers like 1.2345678E9
         String stringCellValue =  BigDecimal.valueOf(numberValue).toPlainString();
         myObj.setValue(stringCellValue);
    }
}