我想在客户端验证日期时间,所以我编写了以下代码。但我没有得到异常,而是得到了 2 月 31 日日期字符串的正确日期时间对象,这显然是一个无效日期。
public class Test {
public static void main(String[] args) {
String dateFormat = "HH:mm:ss MM/dd/yyyy";
String dateString = "11:30:59 02/31/2015";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateFormat, Locale.US);
try {
LocalDateTime date = LocalDateTime.parse(dateString, dateTimeFormatter);
System.out.println(date);
} catch (Exception e) {
// Throw invalid date message
}
}
}
Output: 2015-02-28T11:30:59
有谁知道为什么LocalDateTime
正在解析此日期时间而不是引发异常。
你只需要严格的ResolverStyle.
解析文本字符串分两个阶段进行。第 1 阶段是根据添加到构建器的字段进行基本文本解析。第 2 阶段将解析后的字段值对解析为日期和/或时间对象。此样式用于控制第 2 阶段(解决)如何发生。
示例代码 - 哪里withResolverStyle(ResolverStyle.STRICT)
是重要的变化,随着使用uuuu
而不是yyyy
(where uuuu
是“年份”,“yyyy”是“时代年份”,因此不明确):
import java.time.*;
import java.time.format.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
String dateFormat = "HH:mm:ss MM/dd/uuuu";
String dateString = "11:30:59 02/31/2015";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter
.ofPattern(dateFormat, Locale.US)
.withResolverStyle(ResolverStyle.STRICT);
try {
LocalDateTime date = LocalDateTime.parse(dateString, dateTimeFormatter);
System.out.println(date);
} catch (DateTimeParseException e) {
// Throw invalid date message
System.out.println("Exception was thrown");
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)