JAVA 判断一个字符串是不是一个合法的日期格式
最近开发公司的项目,一直找不到合适的正则表达式可以判断一个字符串是否可以转成日期,今天发现可以采用SimpleDateFormat类的parse方法进行判断,如果转换不成功,就会出现异常,
具体代码如下:
public static boolean isValidDate(String str) {
boolean convertSuccess=true;
// 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm");
try {
// 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
format.setLenient(false);
format.parse(str);
} catch (ParseException e) {
// e.printStackTrace();
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
convertSuccess=false;
}
return convertSuccess;
}
--------整个表达式验证----------------------------------
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TimeUtil {
/**
* 验证时间字符串格式输入是否正确
* @param timeStr
* @return
*/
public static boolean valiDateTimeWithLongFormat(String timeStr) {
String format = "((19|20)[0-9]{2})-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) "
+ "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";
Pattern pattern = Pattern.compile(format);
Matcher matcher = pattern.matcher(timeStr);
if (matcher.matches()) {
pattern = Pattern.compile("(\\d{4})-(\\d+)-(\\d+).*");
matcher = pattern.matcher(timeStr);
if (matcher.matches()) {
int y = Integer.valueOf(matcher.group(1));
int m = Integer.valueOf(matcher.group(2));
int d = Integer.valueOf(matcher.group(3));
if (d > 28) {
Calendar c = Calendar.getInstance();
c.set(y, m-1, 1);
int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
return (lastDay >= d);
}
}
return true;
}
return false;
}
public static void main(String[] args){
System.out.println(TimeUtil.valiDateTimeWithLongFormat("2016-5-2 08:02:02"));
System.out.println(TimeUtil.valiDateTimeWithLongFormat("2016-02-29 08:02:02"));
System.out.println(TimeUtil.valiDateTimeWithLongFormat("2015-02-29 08:02:02"));
System.out.println(TimeUtil.valiDateTimeWithLongFormat("2016-02-02 082:02"));
}
}