项目在解析 Excel 的时候,日期数据可能有多种格式:"2020-10-1"、"2020.10.1"、"2020/10/1"、"2020年10月1日"四种格式,需要解析成 Java 中的 Date 类型。
方法一:
定义好对应的日期格式数组,如“yyyy-MM-dd”、“yyyy.MM.dd”、“yyyy/MM/dd”、“yyyy年MM月dd日”,循环遍历直到解析得到 Date 返回,所有的格式均解析失败则返回 null。
方法二:
换一种思路:我们可以使用正则匹配通过 String.replaceAll 方法把"2020-10-1"、"2020.10.1"、"2020/10/1"、"2020年10月1日"都转换成"2020-10-1",再按照“yyyy-MM-dd”的格式转换成 Date 类型就可以了。
大致代码实现如下:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author dcc
* @since 2021/3/25
*/
public class DateTest {
private static ThreadLocal<SimpleDateFormat> SIMPLE_DATE_FORMAT = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));
private static final String regex = "\\/|\\.|年|月|日";
public static void main(String[] args) {
String s1 = "2018-10-01";
System.out.println(parseDate(s1));
String s2 = "2018.10.2";
System.out.println(parseDate(s2));
String s3 = "2018/10/3";
System.out.println(parseDate(s3));
String s4 = "2018年10月4日";
System.out.println(parseDate(s4));
}
public static Date parseDate(String dateStr) {
if (dateStr == null || dateStr.length() == 0) {
return null;
}
Date date = null;
try {
date = SIMPLE_DATE_FORMAT.get().parse(dateStr.replaceAll(regex, "-"));
return date;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
测试输出结果:
Mon Oct 01 00:00:00 CST 2018
Tue Oct 02 00:00:00 CST 2018
Wed Oct 03 00:00:00 CST 2018
Thu Oct 04 00:00:00 CST 2018