JXL和POI读取Excel日期的处理

一般格式日期数据的读取:

JXL:

一般情况下可以使用DateCell类日期数据,并可以使用isTime()判断是否是时间。

示例:

CellType cellType = cell.getType();

if (cellType == CellType.DATE || cellType == CellType.DATE_FORMULA)
    DateCell dc = (DateCell) cell;
if (dc.isTime())
    .......
else
    ......

获取的日期需要调整时区,参见:http://www.andykhan.com/jexcelapi/tutorial.html#dates

TimeZone gmtZone = TimeZone.getTimeZone("GMT");
SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy");
format.setTimeZone(gmtZone);

DateCell dateCell = .... 
String dateString = format.format(dateCell.getDate());

 

POI:

POI没有专门的DateCell,只能org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(Cell)判断,再使用org.apache.poi.ss.usermodel.DateUtil.getJavaDate(double)转换。

示例:

import org.apache.poi.ss.usermodel.DateUtil;

 

if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    double d = cell.getNumericCellValue();
    if (DateUtil.isCellDateFormatted(cell))
        Date date = DateUtil.getJavaDate(d);
}

 

特殊格式日期数据的处理(如:m月d日格式的日期):

在读取这类日期时,JXL与POI一样,均读取为double,可以通过判断单元格的格式id解决,id的值是58。

JXL示例(调用了POI的方法):

NumberCell nc = (NumberCell) cell;
XFRecord xfr = (XFRecord) nc.getCellFormat();
if (xfr.formatIndex == 58) {
    Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(nc.getValue());
    ......
}

POI示例:

CellStyle cs = cell.getCellStyle();
double d = cell.getNumericCellValue();

if (cs.getDataFormat() == 58)
    Date date = DateUtil.getJavaDate(d);
}

 

原文地址 :http://blog.csdn.net/rock_tapestry/article/details/6666526

你可能感兴趣的:(poi,Excel,JXL,日期格)