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)
这应该适合你,我想(如果你想保持简单).
你必须做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)
使用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)