我需要验证字符串是否包含有效的日期输入。为此,我创建了一个方法
public static Date validateDateFormat(final String expectedDateFormat, final String dateToValdate) {
DateTimeFormatter formatter = DateTimeFormat.forPattern(expectedDateFormat);
DateTime dt = null;
try {
dt = formatter.parseDateTime(dateToValdate);
} catch (Exception e) {
log.error("cannot parse {0} to format {1}", dateToValdate, expectedDateFormat);
}
if (dt != null) {
return dt.toDate();
}
else {
return null;
}
}
使用这些值,它不会按预期返回null。字符串将被转换为日期时间为0018-12-18T00:00:00.000 + 00:53:28的DateTime,是否可以更改此行为?虽然格式不正确,但我会失败。
这是我的测试
@Test
public void checkFormat6() {
String date = "18.12.18";
String expectedFormat = "dd.MM.yyyy";
assertNull(DateFormatChecker.validateDateFormat(expectedFormat, date));
}
我需要使用JDK 7和joda-time 2.10
答案 0 :(得分:4)
Joda时间与y
,yy
或yyyy
严格不匹配。甚至d.M.y
模式也会将18.12.18
解析为有效的日期时间。
您可以使用java.time
类(Java 7有一个反向端口)来获得更严格的模式解析。通过设置ResolverStyle.STRICT
:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(expectedFormat)
.withResolverStyle(ResolverStyle.STRICT);
以上示例将使dd.MM.yyyy
失败,但仍会让d.M.y
解析18.12.18
。