背景:
在一次处理excel批量数据导入时,需要导入一个订单的发货时间,导入模板中对应的时间那一列使用的是日期格式。那么导入进来DEBUG发现是一个数字,比如2022年7月5日导入进来之后就变成了44745。
原因:
因为excel中的时间是从1900年开始的,而转换成文本类型的数字则代表着1900年之后的N天,知道这个原理之后,就很好解决这个问题了:
代码语言:javascript复制/**
* 将日期数字转为时间格式
* daysDuration = 44745
*
* @param daysDuration
* @return
*/
public static String getTime(String daysDuration) {
//如果不是数字
if(!isNumeric(daysDuration)){
return null;
}
//如果是数字 小于0则 返回
BigDecimal bd = new BigDecimal(daysDuration);
int days = bd.intValue();//天数
int mills = (int) Math.round(bd.subtract(new BigDecimal(days)).doubleValue() * 24 * 3600);
//获取时间
Calendar c = Calendar.getInstance();
c.set(1900, 0, 1);
c.add(Calendar.DATE, days);
int hour = mills / 3600;
int minute = (mills - hour * 3600) / 60;
int second = mills - hour * 3600 - minute * 60;
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, second);
return dateFormat.format(c.getTime());
}
/**
* 校验是否数据含小数点
*
* @param str
* @return
*/
private static boolean isNumeric(String str){
Pattern pattern = Pattern.compile("[0-9] \.*[0-9]*");
Matcher isNum = pattern.matcher(str);
if(!isNum.matches()){
return false;
}
return true;
}
首发链接:https://cloud.tencent.com/developer/article/2285741