使用POI从Excel工作表中获取日期

时间:2011-04-01 04:03:55

标签: java excel apache-poi

我使用以下代码

使用POI从Excel工作表中获取日期
if (DateUtil.isCellDateFormatted(currentCell))
                {
                    Date date = currentCell.getDateCellValue();
                    cellValue = date.getDate() + "/" + (date.getMonth() + 1) + "/" + (1900 + date.getYear());
}

默认情况下,Excel工作表的日期格式为MM / dd / yy。但如果我使月份值大于12(即> = 13),则格式将更改为dd / MM / yy。

根据上面的代码,如果我将日期定义为10/11/2010,它将月份作为10,将日期作为11。如果我像15/10/2010那样给出,我将月份作为10,将日期作为15。

但我需要保持一种格式为dd / MM / yyyy。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:11)

使用SimpleDateFormat格式化日期,因为“currentCell.getDateCellValue()”返回日期。

if (DateUtil.isCellDateFormatted(currentCell))
{
   try {

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    cellValue =  = sdf.format(currentCell.getDateCellValue());

    } catch (ParseException e) {
            e.printStackTrace();
    }
}

这应该可以防止正在进行的自动转换。

答案 1 :(得分:3)

您可以尝试使用org.apache.poi.ss.usermodel.DataFormatter - 假设您将Excel文件设置为将日期单元格格式化为dd / mm / yyyy,那么它应该能够渲染它你来自牢房。

// Get a date formatter, and ensure it does dd/mm/yyyy format
DataFormatter formatter = new DataFormatter(Locale.UK);

// Find date cells
for(Row r : sheet) {
  for(Cell c: r) {
     if(DateUtil.isCellDateFormatted(c)) {
        String date = DataFormatter.formatCellValue(c);
        // date should be the same as shown in Excel
     }
  }
}

或者,如果您的单元格被格式化为日期但格式不同,那么您有两种选择。一种是将单元格样式更改为dd / mm / yyyy格式,然后要求DataFormatter对其进行格式化,另一种是从DateUtil获取java.util.Date对象,然后使用SimpleDateFormat格式对其进行格式化,如其他人所建议的那样

答案 2 :(得分:0)

确保Excel中的字段本身在Excel中配置为DATE数据类型。那么Excel中的实际格式应该与POI读取它的方式无关。