您好我正在尝试使用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工作表中读取日期值。
答案 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的内容。如果它是一种时间格式,那么你就可以得到它。