现在要求判断字符串格式是2021-11-11。
我一开始的想法是用date = format.parse(strDate);
但是当SimpleDateFormat的参数格式是
```c++
yyyy-MM-dd
```的时候有一个问题。
那就是存在时间问题
2021-11-11 14:15:19
这个格式的事件也会被识别成通过。
但是要求是不能带时间这个要怎么处理好呢?
正式表达式试试。
String a = "2020-21-12";
System.out.print(a.matches("^[0-9]{4}-[0-9]{2}-[0-9]{2}$"));
看你严不严格.如果还有对闰年.具体月份日期的要求. 比如2021-12-32.2021-02-30这种不正经的日期.搜到一个巨长的正则.看下面有没有人给优化下了
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$
可以用正则表达式判断
判断字符串长度是不是10位并且第5位和第8位是不是-
先截取字符串前10位,然后再使用 parse 尝试解析,这应该是最简单的方案了
可以用格式化字符串来判断,用try-catch语句,捕捉到异常就代表格式不对,简单写一下:
String format = "yyyy-MM-dd";
String str = "xxxxx";
try{
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(str);
} catch(Exception e) {
System.out.println("解析日期字符串出错");
}