java 字符串转时间 不限输入格式
由于导入Excel数据时, 用户有时会以文本格式输入日期字符串, 导致后台poi读取Excel时报错
但是用户输入的格式没办法提前判断, 所有动手用正则判断写了工具类
/**
* 字符串转时间, 可识别常见类型
* @param str 要转换的格式
* @return 转化后的时间
* @throws Exception .
*/
public static Date parseDate(String str) throws Exception {
str = str.trim();
String pattern = "\\d{4}([^\\d]?)\\d{1,2}\\1\\d{1,2}( \\d{1,2}([^\\d])\\d{1,2})?";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(str);
String dateSplit, timeSplit;
if (m.find()) {
dateSplit = m.group(1);
timeSplit = m.group(3);
String formatStr = String.format("yyyy%sMM%sdd", dateSplit, dateSplit);
if (timeSplit != null) {
String timeStr = str.substring(str.indexOf(" "));
String[] split = timeStr.split(timeSplit);
if (split.length == 2) {
formatStr += String.format(" HH%smm", timeSplit);
}
if (split.length > 2) {
formatStr += String.format(" HH%smm%sss", timeSplit, timeSplit);
}
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatStr);
return simpleDateFormat.parse(str);
} else {
throw new Exception("输入的时间格式不符");
}
}
测试代码
@Test
public void test() throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = DateUtils.parseDate("2020-1-1");
System.out.println(format.format(date1));
Date date2 = DateUtils.parseDate("20200131");
System.out.println(format.format(date2));
Date date3 = DateUtils.parseDate("2020/10/02 10:12:16");
System.out.println(format.format(date3));
Date date4 = DateUtils.parseDate("2020-10-02 10:12");
System.out.println(format.format(date4));
}
结果输出
2020-01-01 00:00:00
2020-01-31 00:00:00
2020-10-02 10:12:16
2020-10-02 10:12:00