我正在尝试检查验证日期。以下是我的代码。当我检查日期 12/12 / 2014XYZ 时,SimpleDateFormat.parse不会抛出异常。对于其他无效日期,例如 13/13/2014 ,它会抛出异常。
public class DateCheck{
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
sdf.setLenient(false);
try {
sdf.parse("12/31/2014XYZ");
System.out.println("Valid Date");
} catch (Exception e) {
System.out.println("Invalid Date");
}
}
}
我google了很多但找不到合适的解决方案。
答案 0 :(得分:3)
使用ParsePosition
,如下所示:
try {
String input = "12/31/2014XYZ";
ParsePosition pp = new ParsePosition(0);
sdf.parse(input, pp);
// Make sure the entire string was parsed
if (pp.getIndex() != input.length())
throw new Exception();
System.out.println("Valid Date");
} catch (Exception e) {
System.out.println("Invalid Date");
}
类似的问题:
答案 1 :(得分:0)
答案 2 :(得分:0)
正如你告诉日期格式“MM / dd / yyyy”所以它只检查“/”之后的前四个字符
如果您将日期写为“12/31 / XYZ2014”,则会抛出异常并打印无效日期。
答案 3 :(得分:0)
来自Java doc。
从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。
因此,12/31/2014
仅从12/31/2014XYZ
开始,并采用有效格式。
例如:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
try {
java.util.Date date=sdf.parse("12/31/2014AnyThing");
System.out.println("Valid Date "+date);
} catch (ParseException e) {
System.out.println("Invalid Date");
}
try {
java.util.Date date=sdf.parse("AnyThing12/31/2014");
System.out.println("Valid Date "+date);
} catch (ParseException e) {
System.out.println("Invalid Date");
}
Out put:
Valid Date Wed Dec 31 00:00:00 IST 2014
Invalid Date
与此相同。
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
try {
java.util.Date date=sdf.parse("12/31/2014XYZ");
System.out.println("Valid Date "+date);
} catch (ParseException e) {
System.out.println("Invalid Date");
}
try {
java.util.Date date=sdf.parse("XYZ12/31/2014");
System.out.println("Valid Date "+date);
} catch (ParseException e) {
System.out.println("Invalid Date");
}
Out put:
Valid Date Wed Dec 31 00:00:00 IST 2014
Invalid Date
编辑:
@aioobe answer将提供不将其作为有效日期格式的解决方案。