java初学新手上路的第一篇博客。字符串转Date,因为字符串的格式很多转换很麻烦所以把我能想到的情况写了下来。代码很丑有幸能被路过的你看到还请不吝赐教。
String时间转Date
public class TimeStrToDate {
private static final String[] timeFormat = {
"HH:mm",
"HH:mm:ss",
"HH:mm:ss.SSS",
"HH:mm:ss,SSS",
"HH时mm分ss秒",
"HH时mm分",
"HH时"
};
private static final String[] dateFormat = {
"yyyy-MM-dd",
"yyyy/MM/dd",
"yyyy\\MM\\dd",
"yyyy.MM.dd",
"yyyy年MM月dd日",
"yyyy年MM月dd号"
};
private static final String[] timeArr = {
//17:30
"^[\\d]{1,2}:[\\d]{1,2}$",
//17:30:21
"^[\\d]{1,2}:[\\d]{1,2}:[\\d]{1,2}$",
//17:30:21.123
"^[\\d]{1,2}:[\\d]{1,2}:[\\d]{1,2}[\\.][\\d]{3}$",
//17:30:21,123
"^[\\d]{1,2}:[\\d]{1,2}:[\\d]{1,2}[,][\\d]{3}$",
//17时30分21秒
"^[\\d]{1,2}时[\\d]{1,2}分[\\d]{1,2}秒$",
//17时30分
"^[\\d]{1,2}时[\\d]{1,2}分$",
//17时
"^[\\d]{1,2}时$"
};
private static final String[] dateArr = {
//2020-06-01
"^[\\d]{4}[-][\\d]{1,2}[-][\\d]{1,2}$",
//2020/06/01
"^[\\d]{4}[/][\\d]{1,2}[/][\\d]{1,2}$",
//2020\06\01
"^[\\d]{4}\\[\\d]{1,2}\\[\\d]{1,2}$",
//2020.06.01
"^[\\d]{4}[.][\\d]{1,2}[.][\\d]{1,2}$",
//2020年06月01日
"^[\\d]{4}年[\\d]{1,2}月[\\d]{1,2}日$",
//2020年06月01号
"^[\\d]{4}年[\\d]{1,2}月[\\d]{1,2}号$"
};
private static final String[] noBlankArr = {
//2020年
"^[\\d]{4}(年)$",
//2020年6月
"^[\\d]{4}(年)[\\d]{1,2}(月)$",
//2020年6月1日
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(日)$",
//2020年6月1日17时
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(日)[\\d]{1,2}(时)$",
//2020年6月1日17时25分
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(日)[\\d]{1,2}(时)[\\d]{1,2}(分)$",
//2020年6月1日17时25分16秒
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(日)[\\d]{1,2}(时)[\\d]{1,2}(分)[\\d]{1,2}(秒)$",
//20200601
"^[\\d]{8}$",
//202006010957
"^[\\d]{12}$",
//20200601095720
"^[\\d]{14}$",
//2020-06-01
"^[\\d]{4}[-][\\d]{1,2}[-][\\d]{1,2}$",
//2020/06/01
"^[\\d]{4}[/][\\d]{1,2}[/][\\d]{1,2}$",
//2020\06\01
"^[\\d]{4}\\[\\d]{1,2}\\[\\d]{1,2}$",
//2020.06.01
"^[\\d]{4}[.][\\d]{1,2}[.][\\d]{1,2}$",
//2020年06月01号
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)",
//2020年06月01号12
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)[\\d]{1,2}$",
//2020年06月01号12时
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)[\\d]{1,2}(时)$",
//2020年06月01号12时12分
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)[\\d]{1,2}(时)[\\d]{1,2}(分)$",
//2020年06月01号12时12分12秒
"^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)[\\d]{1,2}(时)[\\d]{1,2}(分)[\\d]{1,2}(秒)$",
};
private static final String[] noBlankFormat = {
"yyyy年",
"yyyy年MM月",
"yyyy年MM月dd日",
"yyyy年MM月dd日HH时",
"yyyy年MM月dd日HH时mm分",
"yyyy年MM月dd日HH时mm分ss秒",
"yyyyMMdd",
"yyyyMMddHHmm",
"yyyyMMddHHmmss",
"yyyy-MM-dd",
"yyyy/MM/dd",
"yyyy\\MM\\dd",
"yyyy.MM.dd",
"yyyy年MM月dd号",
"yyyy年MM月dd号HH",
"yyyy年MM月dd号HH时",
"yyyy年MM月dd号HH时mm分",
"yyyy年MM月dd号HH时mm分ss秒",
};
/**
* @Description: 时间字符串转Date
* @Param: 需要转换的时间字符串
* @return: Date 转换后的Date类型时间
*/
public static Date parseDate(String dateStr) {
if (dateStr == null || "".equals(dateStr)){
return null;
}
Pattern r = Pattern.compile("\\s");
Matcher m = r.matcher(dateStr);
if (m.find()){
String blank = m.group();
String[] split = dateStr.split(blank);
if (split.length != 2) return null;
int dateIndex = Integer.MIN_VALUE, timeIndex = Integer.MIN_VALUE;
for (int i = 0; i < dateArr.length; i++) {
if (split[0].matches(dateArr[i])){
dateIndex = i;
break;
}
}
for (int i = 0; i < timeArr.length; i++) {
if (split[1].matches(timeArr[i])){
timeIndex = i;
break;
}
}
String format = "";
try {
format = dateFormat[dateIndex] + blank + timeFormat[timeIndex];
}catch (IndexOutOfBoundsException e){
return null;
}
return parse(dateStr, format);
}else {
for (int i = 0; i < noBlankArr.length; i++) {
if (dateStr.matches(noBlankArr[i])){
return parse(dateStr, noBlankFormat[i]);
}
}
}
return null;
}
/**
* 时间转换
* @Date: 2020/7/17
*/
private static Date parse(String dateStr, String format){
Date date = null;
try {
date = DateUtils.parseDate(dateStr, format);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
```.js/