实用正则表达式判断日期格式是否正确,转换成Date类型和当前日期比较大小
/**
* compare to current date
*
* @param date
* @return
*/
public static boolean isBefore(String date) {
if (!isDate(date)) {
return false;
}
Date dateCmp = null;
try {
dateCmp = DATE_FORMATTER1.get().parse(date);
System.out.println(dateCmp);
} catch (ParseException e) {
try {
dateCmp = DATE_FORMATTER2.get().parse(date);
System.out.println(dateCmp);
} catch (ParseException e1) {
try {
dateCmp = DATE_FORMATTER3.get().parse(date);
System.out.println(dateCmp);
} catch (ParseException e2) {
throw new RuntimeException(e2);
}
}
}
try {
Date dateNow = DATE_FORMATTER1.get().parse(DATE_FORMATTER1.get().format(new Date()));
System.out.println(dateNow);
System.out.println(dateCmp.compareTo(dateNow));
if (0 < dateCmp.compareTo(dateNow)) {
return false;
}
} catch (ParseException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* TODO 判断是否日期格式
*
* @param strDate
* @return
*/
public static boolean isDate(String strDate) {
String regex = "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$";
Pattern pattern = Pattern.compile(regex);
Matcher m = pattern.matcher(strDate);
if (m.matches()) {
return true;
} else {
return false;
}
}
/** yyyy-MM-dd */
private static final ThreadLocal<DateFormat> DATE_FORMATTER1 = new ThreadLocal<DateFormat>() {
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
/** yyyy/MM/dd */
private static final ThreadLocal<DateFormat> DATE_FORMATTER2 = new ThreadLocal<DateFormat>() {
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy/MM/dd");
}
};
/** yyyyMMdd */
private static final ThreadLocal<DateFormat> DATE_FORMATTER3 = new ThreadLocal<DateFormat>() {
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyyMMdd");
}
};