Существует ли польза *строга* синтаксический анализатор даты для Java?

Я получил ответ.

Я публикую ответ, если он может помочь другим.
API, который я вызываю, требует подписи, которая генерируется каждый раз, когда вызывается API. Эта подпись внутренне получает ключ пользователя, который я жестко прописал в своем коде, и он отличается на сервере. поэтому при создании requestURL он генерировал неверный URL. Я исправил это, и теперь он работает и на сервере.

11
задан MetroidFan2002 28 January 2009 в 21:47
поделиться

2 ответа

Я не вижу, что Joda распознает что как допустимая дата. Пример:

strict = org.joda.time.format.DateTimeFormat.forPattern("MM/dd/yyyy")
try {
    strict.parseDateTime('40/40/4353')
    assert false
} catch (org.joda.time.IllegalFieldValueException e) {
    assert 'Cannot parse "40/40/4353": Value 40 for monthOfYear must be in the range [1,12]' == e.message
}



Настолько лучше всего, как я могу сказать, ни один не делает DateFormat с setLenient (ложь). Пример:

try {
    df = new java.text.SimpleDateFormat('MM/dd/yyyy')
    df.setLenient(false)
    df.parse('40/40/4353')
    assert false
} catch (java.text.ParseException e) {
    assert e.message =~ 'Unparseable'
}

Надеюсь, это поможет!

21
ответ дан 3 December 2019 в 02:30
поделиться

Хороший способ сделать строгую проверку с помощью DateFormat - переформатировать разобранную дату и проверить равенство с исходной строкой:

String myDateString = "87/88/9999";
Date myDate = dateFormat.parse(myDateString);
if (!myDateString.equals(df.format(myDate))){
  throw new ParseException();
}

Работает как шарм.

11
ответ дан 3 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: