這個問題網上有許多解決方法:
- 讀取的數值為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());
}
}