如下正則可以滿足校驗:
public static boolean isDate(String date){
/**
* 判斷日期格式和範圍
*/
String rexp = "^((\\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]))))))";
Pattern pat = Pattern.compile(rexp);
Matcher mat = pat.matcher(date);
boolean dateType = mat.matches();
return dateType;
}
最近導入excel日期數據時候,獲取日期格式的值,需要判斷日期格式,只要調用getDateVal(row,number),不符合格式的數據統統返回null,然後返回提示即可:
Date planStartTime = getDateVal(row, 1);
public Date getDateVal(Row row, int number) {
//判斷是否是數值格式
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if (row.getCell(number).getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
short format = row.getCell(number).getCellStyle().getDataFormat();
//判斷日期格式是否是 2017/01/01
/*
* 14 yyyy-MM-dd / 2017/01/01
* 31 yyyy年m月d日
* */
if (format == 14 || format == 31) {
date = DateUtil.getJavaDate(row.getCell(number).getNumericCellValue());
try {
date = sdf.parse(sdf.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return date;
}