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

时间:2015-07-07 10:34:22

标签: java date apache-poi

我正在使用poi jar从excel表中读取,其中有一个日期列。如果我打印出数据的值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

5 个答案:

答案 0 :(得分:3)

首先检查您的日期格式

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

应该是

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

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

参考HSSFDateUtil

检查HSSFDateUtil.isCellDateFormatted(),getExcelDate,getJavaDate

<强> getJavaDate

public static java.util.Date getJavaDate(double date)

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

注意:如果Java中的默认TimeZone使用夏令时,那么转换回Excel日期可能不会给出相同的值,即比较excelDate == getExcelDate(getJavaDate(excelDate,false))并不总是如此。例如,如果默认时区是欧洲/哥本哈根,则在2004-03-28,欧洲中部时间01:59之后的分钟是03:00 CEST,如果excel日期表示02:00到03:00之间的时间则转换为过去夏天时间03:00 参数:

日期 - Excel日期。 返回: 日期的Java表示形式,如果日期不是有效的Excel日期,则为null

参见: 时区

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

答案 1 :(得分:3)

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

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

阅读SimpleDateFormat

的Java文档

答案 2 :(得分:2)

查看java.text.SimpleDateFormat的JavaDoc:

D是一年中的一天

Y适用于一年中的一周。

您可能希望在{月d天和y年使用小写变体

答案 3 :(得分:2)

您希望将"MM/dd/yyyy"写为日期格式。资本DD表示一年中的一天,6月30日为181。

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

答案 4 :(得分:0)

日期实际上以数字形式存储在单元格中。

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);
    }
}