我在Java中有以下代码。
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
String expiryDateInString = "05/14/86";
final Instant expiryDate = dateFormat.parse((expiryDateInString)).toInstant();
我希望这会导致一个解析异常,但我得到一年解析为0086,我相信这是过去的方式。我怎样才能使这一年成为严格的4位数年份,而其他任何事情都会例外。
答案 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位年份,你可以使用"可选"使用[
和]
的格式化程序的功能。在可选块中提供年uuuu
和uu
的可能格式,您将拥有:
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日