Java POI操作Excel的日期,统一日期格式
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;
}