使用Apache POI HSSFCell获取错误的读取时间

时间:2012-07-21 13:36:37

标签: java apache-poi

您好我正在尝试使用HSSFCell读取Excel工作表值。我的excel shhet拥有4列。日期,名称,In_time和Out_time。

在我的循环中我给了..

            HSSFRow row = (HSSFRow) itr.next();
            Iterator cell = row.cellIterator();
            List data = new ArrayList();
            while(cell.hasNext())
            {
                HSSFCell value = (HSSFCell) cell.next();

                if (value.getCellType() == Cell.CELL_TYPE_NUMERIC) 
                {
                    if(HSSFDateUtil.isCellDateFormatted(value))
                    {
                        if(HSSFDateUtil.isADateFormat((int)value.getNumericCellValue(), "dd:mmm:yyyy"))
                        {
                            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                            String date = df.format(value.getDateCellValue());
                            data.add(date);
                        }
                                             }
                        else

                    {
                        data.add(value.getNumericCellValue());
                    }
                }
                else if (value.getCellType() == Cell.CELL_TYPE_STRING)
                {
                    data.add(value.getStringCellValue());
                }
                else
                {
                    data.add("");
                }
            }
            sheetData.add(data);

字段date ans name正在正确执行。 但是,当我试图获得时间时,它给出了这样的日期值。例如在我的excel中我有时间4:05:12 AM ..但它的价值作为一些日期如1899-12-30 .. 如何使用Apache POI从Excel工作表中读取日期值。

1 个答案:

答案 0 :(得分:2)

您似乎通过调用SimpleDateFormat将单元格明确格式化为“yyyy-MM-dd”日期。所以,你得到的正是你所要求的,最后得到一个yyyy-MM-dd日期字符串应该不足为奇了!

目前,您的明确yyyy-MM-dd代码取自您的问题,有点奇怪:

 if(HSSFDateUtil.isCellDateFormatted(value))
     {
     if(HSSFDateUtil.isADateFormat((int)value.getNumericCellValue(), "dd:mmm:yyyy"))
                    {
                        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                        String date = df.format(value.getDateCellValue());
                        data.add(date);
                    }

如果要格式化单元格,使其看起来与Excel中的格式相同,则需要考虑应用于单元格的格式规则。如果你这样做,你的代码会看起来更简单:

 DataFormatter formatter = new DataFormatter();

 .....

 if(HSSFDateUtil.isCellDateFormatted(value)) {
     String date = formatter.formatCell(value);
 }

如果单元格应用了yyyy-MM-dd格式,那么你仍然会得到类似2012-07-20的内容。如果它是一种时间格式,那么你就可以得到它。