根据格式dd / mm / yyyy验证给定日期
有效期= 1
无效= -1
示例1:
输入= 12/06/1987
输出= 1个
例2:
输入= 03/1/1987
输出= -1
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckDateFormat {
public static void main(String[] args) {
String s1="29/02/2006";
getvalues(s1);
}
public static void getvalues(String s1) {
if(s1.matches("[0-9]{2}[/][0-9]{2}[/][0-9]{4}"))
{
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
try {
Date d1=sdf.parse(s1);
System.out.println(1);
} catch (ParseException e) {
//e.printStackTrace();//Always going to catch block
System.out.println(-1);
}
}
else
System.out.println(-1);
}
}
代码的问题在于它始终返回-1。
它总是进入catch块并给出ParseException
正则表达式有问题吗?
答案 0 :(得分:8)
问题在于这一行:
sdf.setLenient(false);
和这个日期:
String s1="29/02/2006";
由于2006
没有闰年使您的日期无效且宽松设置为false日期解析调用失败并抛出{{1 }}
如果您注释掉ParseException
行:
或使用有效日期:
sdf.setLenient(false);
由于String s1="29/02/2008";
是闰年,因此2月29日为有效日期。
答案 1 :(得分:0)
您不需要正则表达式。如果您获得ParseException
,则return -1
可以return 1
:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckDateFormat {
public static void main(String[] args) {
String s1="29/02/2006";
System.out.println(getvalues(s1));
}
public static int getvalues(String s1) {
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
try {
Date d1=sdf.parse(s1);
System.out.println(1);
} catch (ParseException e) {
return -1;
}
return 1;
}
}
答案 2 :(得分:0)
由于以下行而抛出异常。评论它。
sdf.setLenient(假);
答案 3 :(得分:0)
由于2006年不是闰年,使用String s1="29/02/2006";
将抛出一个解析异常。
尝试其他日期,它会正常工作。