поведение Java SimpleDateFormat - PullRequest
       4

поведение Java SimpleDateFormat

4 голосов
/ 10 декабря 2010

У меня есть SimpleDateFormat с шаблоном yyyy-M-d" и следующим сценарием:

String str = "02-03-04";        
SimpleDateFormat f = new SimpleDateFormat("yyyy-M-d");
f.setLenient(false);
System.out.println(f.parse(str));

Вывод Sat Mar 04 00:00:00 EST 2

Моя цель состояла в том, чтобы отлавливать только даты в форматекак 2004-02-03 и игнорировать 02-03-04.Я думал, что yyyy в шаблоне потребует 4 цифры года, но ясно, что это не так.Может кто-нибудь объяснить, почему это не вызывает исключение разбора?Я бы хотел, чтобы ...

1 Ответ

7 голосов
/ 10 декабря 2010

Ну, я могу объяснить это из документов :

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

. Возможно, что Joda Time будет более строгим -и в целом это лучший API, IMO ...

Вы всегда можете вызвать исключение, если год после разбора меньше 1000 ...

...