Исключение анализа даты, когда год не состоит из четырех цифр - PullRequest
0 голосов
/ 16 мая 2018

У меня следующий код на Java.

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

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

Я хочу, чтобы это вызвало исключение синтаксического анализа, но я получаю год, проанализированный как 0086, что, я считаю, уже в прошлом. Как я могу сделать год строго четырехзначным, и все остальное даст исключение.

1 Ответ

0 голосов
/ 16 мая 2018

Используя java.time вместо предыдущего API даты, вы можете использовать DateTimeFormatter, который будет выдавать исключение, если это не правильный год

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

Исключение в потоке "main" java.time.format.DateTimeParseException: текст '05 / 14/86 'не может быть проанализирован с индексом 6

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

1986-05-14

В противном случае, если вы хотите разрешить год с двумя и четырьмя цифрами, вы можете использовать «опциональную» функцию форматера, используя [ и ].Предоставляя оба возможных формата для года uuuu и uu в дополнительных блоках, у вас будет:

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

2086-05-14

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

1986-05-14

...