Как java SimpleDateFormat может разобрать это - '31.03.09 10:04 AM () (* & * ^ %% ^ $'? - PullRequest
2 голосов
/ 03 мая 2011

Я делаю простую проверку с использованием SimpleDateFormat, она отлично работает, кроме одной вещи: Когда ему передается значение типа '3/31/09 10:04 () ( & ^ %% ^ $' , исключение ParseException не выдается. Он просто игнорирует этот суффикс / конец . Есть ли способ заставить его генерировать ParseException для таких входных данных?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Вы можете проверить, совпадает ли форматированная дата.

SimpleDateFormat sdf = new SimpleDateFormat("M/dd/yy h:mm a");
Date date = sdf.parse(t);
String t2 = sdf.format(date);
if (!t2.equals(t))
    throw new ParseException("Not an exact match '" + t2 + "' != '" + t + "'", 0);

, если вы просто хотите проверить конечный текст

if (!t.endsWith("M"))
    throw new ParseException("Invalid format '" + t + "'", 0);
0 голосов
/ 03 мая 2011

Попробуйте позвонить setLenient(false)

Укажите, должен ли анализ даты / времени быть снисходительным.При мягком анализе синтаксический анализатор может использовать эвристику для интерпретации входных данных, которые точно не соответствуют формату этого объекта.При строгом разборе входные данные должны соответствовать формату этого объекта.

Также взгляните на javadocs для parse с добавлением акцента (мой) ...

Метод пытается проанализировать текст, начиная синдекс, заданный поз.Если синтаксический анализ завершается успешно, то индекс pos обновляется до индекса после последнего использованного символа (при синтаксическом анализе не обязательно используются все символы до конца строки), и анализируемая дата возвращается. Обновленный pos может использоваться для указания начальной точки для следующего вызова к этому методу.Если возникает ошибка, то индекс pos не изменяется, индекс ошибки pos устанавливается равным индексу символа, в котором произошла ошибка, и возвращается null.

Итак, вам нужно проверить индекс pos и, возможно, ошибку pos.Что-то вроде ...

if (pos.getIndex() == input.length()) { /* all looks good */
...