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

时间:2018-05-16 05:08:41

标签: 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,我相信这是过去的方式。我怎样才能使这一年成为严格的4位数年份,而其他任何事情都会例外。

1 个答案:

答案 0 :(得分:4)

使用java.time代替之前的日期API,您可以使用DateTimeFormatter,如果它不是正确的年份,则会引发异常

DateTimeFormatter.ofPattern("MM/dd/uuuu").parse(("05/14/86")
  

线程中的异常" main" java.time.format.DateTimeParseException:Text' 05/14/86'无法在索引6处解析

DateTimeFormatter.ofPattern("MM/dd/uuuu").parse(("05/14/1986")
  

1986年5月14日

在相反的情况下,如果你想同时允许2和4位年份,你可以使用"可选"使用[]的格式化程序的功能。在可选块中提供年uuuuuu的可能格式,您将拥有:

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

2086年5月14日

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

1986年5月14日