Excel导入日期格式时自动转为五位数文本

文章讲述了在Excel中日期格式转为文本导致后端解析错误的问题,提供了两种解决方案:一是设置单元格为文本格式并手动转换,二是利用1900/01/01到目标日期的天数差计算实际日期。
摘要由CSDN通过智能技术生成

问题描述:Excel导入数据时,当数据是日期可能会存在问题,日期格式转为文本了,例如“2023-07-31”接收时变为“45138”,导致后端解析日期出错,无法导入。

解决方法:

方法一:将Excel日期的那一整列设置单元格格式为文本,后端解析字符串格式日期;

方法二:不改变Excel格式,通过转换文本方式得到实际日期;经实际计算是45136,会有2天的误差,这个45136就是1900/01/01到2023/07/31的天数。

代码如下:

if (orderExcel.getFaultTime().length() == 5) { //故障日期
    //方法一:
    LocalDate initDate = LocalDate.parse("1900-01-01");
    LocalDate localDate = initDate.plusDays((long) (Double.parseDouble(orderExcel.getFaultTime()) - 2));
    log.info("转换后的故障日期为:" + localDate);
    repairOrder.setFaultTime(localDate);

    //方法二:由于1900/1/1 到 1970/1/1 之间有 25569 天,所以需要减去25569天,来计算时间戳
    long l =(long) ((Double.parseDouble(orderExcel.getFaultTime()) - 25569) * 24 * 3600 * 1000);
    log.info("Epoch point of time is 1970-01-01T00:00:00Z(秒):" + l);
    LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(l), ZoneId.systemDefault());  //等效于localDateTime = new Timestamp(l).toLocalDateTime();
    log.info("转换后的故障时间为:" + localDateTime);
    

} else {
    repairOrder.setFaultTime(LocalDate.parse(orderExcel.getFaultTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值