Java 年份不是四位数时的日期分析异常

Java 年份不是四位数时的日期分析异常,java,date,datetime,simpledateformat,Java,Date,Datetime,Simpledateformat,我有以下Java代码 SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); String expiryDateInString = "05/14/86"; final Instant expiryDate = dateFormat.parse((expiryDateInString)).toInstant(); 我希望这会导致一个解析异常,但我得到了一年的解析为0086,我相信这是过去的方式。如何将年份设置为严格意

我有以下Java代码

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
String expiryDateInString = "05/14/86";

final Instant expiryDate = dateFormat.parse((expiryDateInString)).toInstant();

我希望这会导致一个解析异常,但我得到了一年的解析为0086,我相信这是过去的方式。如何将年份设置为严格意义上的4位数年份,而任何其他年份都会出现异常。

使用
java.time
而不是以前的日期API,如果年份不正确,可以使用该API引发异常

DateTimeFormatter.ofPattern("MM/dd/uuuu").parse(("05/14/86")
线程“main”java.time.format.DateTimeParseException中的异常:无法在索引6处分析文本“05/14/86”

1986-05-14

在相反的情况下,如果希望同时允许2位和4位年份,可以使用格式化程序的“可选”功能,使用
[
]
。在可选块中提供年度
uu
uu
的可能格式,您将有:

DateTimeFormatter.ofPattern("MM/dd/[uuuu][uu]").parse(("05/14/86")
2086-05-14

1986-05-14


我相信这是过去的事了为什么你会相信呢?当你使用这个简单的格式(“MM/dd/yyyy”);然后以4位数字表示年份,对于2位数字,使用SimpleDateFormat(“MM/dd/yy”);如果是2位数或年份小于4位数。我需要一个解析异常。您应该使用
SimpleDataFormatter
的时间可能与过去的时间重复。:-)这个类现在已经过时很久了,而且也是出了名的麻烦。而且我也不知道有什么办法可以说服它按照你的意愿行事。在任何情况下,今天我们有这么多更好的和它的
DateTimeFormatter
。看见
DateTimeFormatter.ofPattern("MM/dd/[uuuu][uu]").parse(("05/14/86")
DateTimeFormatter.ofPattern("MM/dd/[uuuu][uu]").parse(("05/14/1986")