Java 使用格式为dd.MM.yyyy的Datetime解析只有两位数年份的字符串?
我需要验证字符串是否包含有效的日期输入。为此,我创建了一个方法Java 使用格式为dd.MM.yyyy的Datetime解析只有两位数年份的字符串?,java,datetime,jodatime,Java,Datetime,Jodatime,我需要验证字符串是否包含有效的日期输入。为此,我创建了一个方法 public static Date validateDateFormat(final String expectedDateFormat, final String dateToValdate) { DateTimeFormatter formatter = DateTimeFormat.forPattern(expectedDateFormat); DateTime dt = null; try {
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,joda time与
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
Joda Time与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
范围检查?你知道你会接受哪一个日期范围,因为它不能追溯到18岁,所以拒绝任何可以追溯到18岁的日期。范围检查?你知道你将接受的日期范围,并且因为它不会追溯到18岁,所以拒绝任何这样的日期。