我正在编写一个窗口,用户必须在输入字段上键入日期,但我不知道如何检查日期或月份是否连贯(例如1到31日之间的日期和1之间的日期) -12)
String string = "26/03/2017";
DateFormat format = new SimpleDateFormat("dd/MM/yyyy") ;
try {
Date date = format.parse(string);
} catch (ParseException e) {
e.printStackTrace();
}
这是我正在格式化Date的代码片段,但我不知道我之前说过的内容。
答案 0 :(得分:0)
尝试解析这样的字符串:string = "36/03/2017";
可以返回完全合法的日期对象,但是字符串的值不正确。
对于这种情况,您可以使用类 SimpleDateFormat 的lenient标志,将该标志设置为false将为日期的无效字符串表示引发异常(例如2017年2月29日)
现在,您可以将标志Lenient设置为false,并捕获异常
String string = "36/03/2017";
DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
format.setLenient(false);
try {
Date date = format.parse(string);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
答案 1 :(得分:0)
DateFormat有一个名为' lenient'默认为true。 您必须设置format.setLenient(false)以检查日期的有效性。如果解析了不正确的日期,则会出现ParseException。
答案 2 :(得分:0)
2017回答。
DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/uuuu")
.withResolverStyle(ResolverStyle.STRICT);
try {
LocalDate.parse(string, format);
} catch (DateTimeParseException e) {
System.out.println("Not a valid date: " + string);
}
虽然SimpleDateFormat
有两个严格程度,宽松和非宽松,DateTimeFormatter
有三个,严格,聪明和宽容。为验证我建议严格。智能是默认设置,因此我们需要明确设置它。
this answer中有更多详细信息。
答案 3 :(得分:-1)
我建议使用正则表达式。对于您的日期格式,它应该类似于:
(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d
您还可以在此处找到更多模式并对其进行验证:http://html5pattern.com/Dates