Excel里的时间常见的写法有三种,一种时2021/5/12,一种时2021-05-12,一种是20210512,第一种和第三种在Excel里是时间格式,第二种是常规格式,也就是字符串。
当我们使用java读取Excel时,读单元格数据时规定了一种类型一种方法,不同类型的数据用一种方法就会报错,可以先将单元格的数据统一转为字符串
row.getCell(rowNum).setCellType(XSSFCell.CELL_TYPE_STRING);
但是当日期为2021/5/12这种格式时,转换就出了问题,会转为一个五位数的字符串
这个数字表示的是从1899年12月30号开始到Excel表格里日期时间的天数,
所以在写一个工具类转换一下就好了
public class UtilDate {
public static final String YYYYMMDD = "yyyyMMdd";
public static final String HHmmss = "HHmmss";
public static final Long ExcelBeginDate= 18991230L;
public static Long getDateLong(Date date) {
SimpleDateFormat sf = new SimpleDateFormat(YYYYMMDD);
return Long.valueOf(sf.format(date));
}
/**
*
* @Title: Excel获取时间时得到数字,进行转化
* eg:44301 转为20210416
* */
public static Long getNdaysLast( int day) throws ParseException {
Date begin = getDate();
// 得到日历
Calendar calendar = Calendar.getInstance();
calendar.setTime(begin);
calendar.add(Calendar.DAY_OF_YEAR, +day);
Date beforedays = calendar.getTime();
return getDateLong(beforedays);
}
public static Date getDate() {
try {
return new SimpleDateFormat(YYYYMMDD).parse(String.valueOf(ExcelBeginDate));
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
格式为2021-05-12这种的直接用String里的字符串替换方法
格式为20210512这种的直接用Integer里字符串转int方法