这个问题网上有许多解决方法:
- 读取的数值为1900年距离日期的天数,调用calander api从1900年加天数即可得到真正的日期时间,具体可参考:
https://blog.csdn.net/weixin_39800144/article/details/78668579
但是此方法并不适用我现有业务,我这边读取excel是公共方法类,遍历每一个单元格,不可能把读取为Cell.CELL_TYPE_NUMERIC格式的单元格都做日期化处理;所以放弃此种做法
- 其实Cell对象有getDateCellValue()方法,也就是专门针对日期获取的方法,所以应该如何判断出Cell对象数值为日期类型,其实CELL_TYPE_NUMERIC类型下还有具体分类,再次判断分类为日期类型:
@SuppressWarnings("static-access")
private static String getValue(Cell cell) {
if (cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {
//数值类型又具体区分日期类型,单独处理
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
return DateJodaUtils.getDateStr(date, "yyyy-MM-dd");
} else {
return NumberToTextConverter.toText(cell.getNumericCellValue());
}
} else {
return String.valueOf(cell.getStringCellValue());
}
}
网友评论