Java日期验证joda时间

roo*_*oot 9 java datetime jodatime

无论如何要验证给定日期(yyyy-MM-dd)是否为有效日期?它也应该处理闰年.例如(2015-02-29)应无效.我正在将日期检索为字符串并将其放入joda DateTime对象中.

mdm*_*mdm 14

之前的回复应该没问题,但鉴于OP 特别要求Joda-Time版本,这个替代方案也可以使用:

@Test
public void test() {

    String testDateOk = "2015-02-25"; // Normal date, no leap year
    String testDateOk2 = "2016-02-29"; // Edge-case for leap year
    String testDateWrong = "2017-02-29"; // Wrong date in a non-leap year
    String testDateInvalid = "2016-14-29"; // plain wrong date

    assertTrue(isValidDate(testDateOk));
    assertTrue(isValidDate(testDateOk2));
    assertFalse(isValidDate(testDateWrong));
    assertFalse(isValidDate(testDateInvalid));
}

boolean isValidDate(String dateToValidate){
    String pattern = "yyyy-MM-dd";

    try {
        DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
        fmt.parseDateTime(dateToValidate);
    } catch (Exception e) {
        return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)


pet*_*rov 9

这应该适合你,我想(如果你想保持简单).
你必须做setLenient(false)一个SimpleDateFormat.

public static boolean validateDate(String dateString){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    sdf.setLenient(false);
    try {
        sdf.parse(dateString);
        return true;
    } catch (ParseException ex) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)


Aro*_*ina 5

使用SimpleDateFormat

public boolean valiDate(String dateString){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    sdf.setLenient(false);
    try {
        Date date = sdf.parse(dateString);
        return true;
    } catch (ParseException ex) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)