如下正则可以满足校验:
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;
}