Странный разбор дат в Java - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь сделать проверку даты.Когда пользователь вводит что-то вроде: 2552533 янв. 2012 1340001 это анализируется как: ср. 03 сентября 07:41:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ 9000. Вот мой код:

SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy kkmm");
...
Date test;
try {
    test = sdf.parse(dateString);
} catch (Exception e) {
...

Здесь dateString - это строка, которую япытаюсь разобраться в свидании.Если строка не является допустимой датой, например: 552533 янв. 2012 г. 1340001, я надеялся, что будет выдана ошибка.Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 23 января 2012

Попробуйте (перед анализом фактической даты):

sdf.setLenient(false);

См. Также:

2 голосов
/ 23 января 2012

SimpleDateFormat.parse не выдает никаких исключений в случае ошибки, возвращает null. Из Javadoc:

 Returns:
     A Date parsed from the string. In case of error, returns null.  
 Throws:
     NullPointerException - if text or pos is null.

Так что вы можете сделать:

SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy kkmm");
...
Date test = sdf.parse(dateString);
if(test == null) {
   // there was an error
}
0 голосов
/ 23 января 2012

Как упоминает Тудор, SimpleDateFormat не выдает исключение, когда не удается проанализировать.Один из вариантов - DateUtils.parseDate90 ( javadocs ) из доступных Apache Commons здесь .

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