举例在excel 不切换文本格式的前提下,选择日期2024/1/1 会自动转为45292.0(double类型)
1.当我们用原生excel时可以根据cell 列获取
if (cell.getCellType()== CellType.NUMERIC) {
Date javaDate = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); //1.可以用HSSFDateUtil进行格式转换
Date date = cell.getDateCellValue(); //2.可以直接获取date类型的属性值
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd"); //格式化为我们想要的格式
String format = dateFormat.format(javaDate); //日期格式
System.out.println(javaDate.getTime()); //13位时间戳格式
cellValue=String.valueOf(format);
}
2.当我们用一些AutoPoi获取时,可以根据Excel工具类用反射的方式与我们想要的实体bean字段去进行匹配,一般字段属性都会定义为String.这时我们需根据列自行判断
public static void main(String[] args) {
String s="45292.0"; //举例日期为2024-01-01 / 45292.0
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
Date date=new Date();
boolean b;
try {
Double.parseDouble(s);
b=true;
}catch (Exception e){
b=false;
}
//如果是double 则HSSF工具类处理
if (b){
date = HSSFDateUtil.getJavaDate(new Double(String.valueOf(s)));
String format = dateFormat.format(date);
System.out.println(date.getTime()/1000);
System.out.println(format);
}
//如果是日期字符串则直接获取想要的属性
else {
//如果是错误的日期比如2024-01-51 建议用封装的Util类先校验一下日期
try {
Date parse = dateFormat.parse(s);
System.out.println(parse.getTime()/1000);
System.out.println(s);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
也是从别的博主中学到的,在此总结写个示例做个记录,以后也会多积累开发中的问题并记录分享!