java poi读取的excel的日期是一个数字,这个数字代表了从1900-1-1到该日期的天数 所以在读取时要将该数字转化为相应的日期
使用Date date = DateUtil.getJavaDate(cell.getNumericCellValue());可以转化为java日期
问题: excel中存在很多不同形式的日期,1996/1/1 1996-1-1 1996-01-01 1996年1月1日等,当然这些日期可能是excel日期类型,也肯能是字符型的日期 想要将它们的统一成 yyyy-m-d的格式
例程:
XSSFCell cell = row.getCell(j); switch (cell.getCellType()){ case NUMERIC: String dateStr = ""; if(cell.getNumericCellValue()<3000) { dateStr = String.valueOf((int)cell.getNumericCellValue()); } else{ Date date = DateUtil.getJavaDate(cell.getNumericCellValue()); int year = date.getYear()+1900; int mon = date.getMonth()+1; dateStr = year + "-" + mon; } //System.out.println(dateStr); cell.setCellType(CellType.STRING); cell.setCellValue(dateStr); break; case STRING: String str = cell.getRichStringCellValue().toString(); //System.out.println(str); cell.setCellValue(getDateFromString(str)); break; } /** * 将字符形式的日期 转换成规范形式的字符日期 * * @param str 转换后的字符型日期 * @return java.lang.String * @exception/throws * @author yangxu * @date 2019-07-17 11:03 */ private static String getDateFromString(String str) { int len = str.length(); String year = ""; String mon = ""; if(!str.startsWith("20")&&!str.startsWith("19")){ throw new RuntimeException("格式有误,第一行不是规范的日期类型"); } if(len<=5) // 2019年 { year = str.substring(0,4); return year; } else if(len<=7)//2019-01 2019-1 2019/1 2019.1 2019年3月 { year = str.substring(0,4); if(str.substring(5).startsWith("0")) { mon = str.substring(6); } else { mon = str.substring(5); } } else if(len >=8) { // 2019-01-01 2019-1-1 2019/1/1 2019.1.1 2019年3月1日 year = str.substring(0,4); String mon_day = str.substring(5); if(mon_day.startsWith("0")) { mon = mon_day.substring(1,2); } else { if(mon_day.charAt(1)>='0' && mon_day.charAt(1)<='9') { mon = mon_day.substring(0,2); } else{ mon = mon_day.substring(0,1); } } } return year+"-"+mon; }