一般格式日期数据的读取:
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);
}