SimpleDateFormat не может вызвать исключение, когда последний символ не числовой - PullRequest
0 голосов
/ 09 ноября 2011

Почему этот код не вызывает ParseException?

DateFormat formatter = new SimpleDateFormat("dd/mm/yyyy");
try {
     String date = "01/01/200'";
     formatter.parse(date);
} catch (ParseException ex) {
     throw new ParseException("Formato de fecha inválido",0);
}

Пожалуйста, объясните мне, что я заблудился. И обратите внимание на простую цитату '

Ответы [ 3 ]

4 голосов
/ 09 ноября 2011

Потому что это то, что должно делать.Если вы проверяете документы на DateFormat , это говорит о параметре.

source - A String whose beginning should be parsed.

Если вы хотите ограничить формат, вам придется использовать регулярные выражения.

Также проверьте правила SimpleDateformat о годе:

For parsing, if the number of pattern letters is more than 2, the year is interpreted literally, regardless of the number of digits. So using the pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.

3 голосов
/ 09 ноября 2011

Согласно Javadocs для SimpleDateFormat

Для синтаксического анализа, если количество букв шаблона превышает 2, год интерпретируется буквально, независимо от количества цифр. Таким образом, используя паттерн «MM / dd / yyyy», «01/11/12» анализирует до 11 января 12 г. н.э.

Так что я подозреваю, что этот год анализируется как 200 н.э.

Я только что запустил вашу программу, и вот что происходит. Преобразованный Date:

Date = Tue Jan 01 00:01:00 EST 200
0 голосов
/ 09 ноября 2011

Метод parse игнорирует любые нечисловые символы в конце даты синтаксического анализа.

Например, при разборе "01/01/01asdsdf0'" он позаботится только о "01/01/01" и проигнорирует текст ... поэтому год будет 01.

Но если вы попытаетесь разобрать, "01/01/asdsdf0'" вызовет исключение, поскольку числовой год отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...