如何检查我的日期是否正确?

时间:2017-05-12 11:37:01

标签: java date format

我正在编写一个窗口,用户必须在输入字段上键入日期,但我不知道如何检查日期或月份是否连贯(例如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的代码片段,但我不知道我之前说过的内容。

4 个答案:

答案 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