使用格式为 dd.MM.yyyy 的日期时间解析只有两位数年份的字符串?
Using Datetime with format dd.MM.yyyy parses strings with only two digit year?
我需要验证字符串是否包含有效的日期输入。为此,我创建了一个方法
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;
}
}
有了这些值,它不会像预期的那样 return 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
.
我需要验证字符串是否包含有效的日期输入。为此,我创建了一个方法
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;
}
}
有了这些值,它不会像预期的那样 return 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
.