以后遇到新的情况,再更新吧。。。
日期工具类:
package com.guoxi.common.utils;
import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
/**
* 时间工具类
*
* @author frank
*/
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
private static String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM",
"yyyy年MM月dd日", "yyyy年MM月dd日 HH时mm分ss秒", "yyyy年MM月dd日 HH时mm分", "yyyy年MM月",
"yyyy年MM月dd日HH:mm", "yyyy年MM月dd日 HH:mm", "yyyy年MM月dd日HH:mm:ss",
"yyyy年MM月dd日 HH:mm:ss"
};
/**
* 日期型字符串转化为日期 格式
*/
public static Date parseDate(Object str) {
if (str == null) {
return null;
}
try {
return parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
}
正则提取方法:
public static void main(String[] args) {
// 最近一阵子采集数据中看到的一些日期
List<String> dateList = Arrays.asList("2021-10-15 16:12:56 来源: 作者:张三 阅读: 17549 ",
"[2023-04-21]",
" [ 2022年04月02日 ] ",
"发布时间:2023年07月18日 20:25 来源:高潮社 编辑:张三",
"2023年7月4日 19:52",
"2022年12月22日 21:48",
"发布时间:2023-07-19 16:13",
"2022-10-22 17:50",
"2023-3-13 15:26",
"2022年10月21日06:28",
"2022-11-24 17:19");
List<String> wrongList = new ArrayList<>();
dateList.forEach(item -> {
Date date = DataWashUtils.getDateFromString(item);
if (Objects.isNull(date)) {
// 把没有识别出来的放入集合中
wrongList.add(item);
}
});
wrongList.forEach(System.out::println);
}
/**
* @return java.util.Date
* @Description 从字符串中提取日期并且转为Date
* @author frank
* @date 2023/07/20 16:36
* @Param val 需要提取日期的字符串
*/
public static Date getDateFromString(String val) {
String result = val;
// 用正则提取日期
String reg = "(\\d{4}年\\d{1,2}月\\d{1,2}日\\d{1,2}:\\d{1,2})" // yyyy年MM月dd日HH:mm
+ "|(\\d{4}年\\d{1,2}月\\d{1,2}日\\d{1,2}:\\d{1,2}:\\d{1,2})" // yyyy年MM月dd日HH:mm:ss
+ "|(\\d{4}年\\d{1,2}月\\d{1,2}日\\s\\d{1,2}:\\d{1,2}:\\d{1,2})" // yyyy年MM月dd日 HH:mm:ss
+ "|(\\d{4}年\\d{1,2}月\\d{1,2}日\\s\\d{1,2}:\\d{1,2})" // yyyy年MM月dd日 HH:mm
+ "|(\\d{4}年\\d{1,2}月\\d{1,2}日)" // yyyy年MM月dd日
+ "|(\\d{4}(-|\\/|\\.)\\d{1,2}(-|\\/|\\.)\\d{1,2}\\s\\d{1,2}:\\d{1,2}:\\d{1,2})" // // yyyy(/|-|.)MM(/|-|.)dd HH:mm:ss
+ "|(\\d{4}(-|\\/|\\.)\\d{1,2}(-|\\/|\\.)\\d{1,2}\\s\\d{1,2}:\\d{1,2})" // yyyy(/|-|.)MM(/|-|.)dd HH:mm
+ "|(\\d{4}(-|\\/|\\.)\\d{1,2}(-|\\/|\\.)\\d{1,2})" // yyyy(/|-|.)MM(/|-|.)dd
;
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
result = matcher.group();
}
return DateUtils.parseDate(result);
}