Использование Datetime с форматом dd.MM.yyyy анализирует строки только с двумя цифрами года? - PullRequest
0 голосов
/ 20 сентября 2018

Мне нужно проверить строки, если они содержат действительный ввод даты.Для этого я создал метод

public static Date validateDateFormat(final String expectedDateFormat, final String dateToValdate) {


    DateTimeFormatter formatter = DateTimeFormat.forPattern(expectedDateFormat);
    DateTime dt = null;

    try {
        dt = formatter.parseDateTime(dateToValdate);
    } catch (Exception e) {
        log.error("cannot parse {0} to format {1}", dateToValdate, expectedDateFormat);
    }
    if (dt != null) {
        return dt.toDate();
    }
    else {
        return null;
    }       
}

С этими значениями он не возвращает ноль, как ожидалось.Строка будет преобразована в DateTime со значением 0018-12-18T00: 00: 00.000 + 00: 53: 28, есть ли способ изменить это поведение?Я думаю, что если формат не верный, он потерпит неудачу.

Вот мой тест

@Test
public void checkFormat6() {
    String date = "18.12.18";
    String expectedFormat = "dd.MM.yyyy";       

    assertNull(DateFormatChecker.validateDateFormat(expectedFormat, date));
}

Мне нужно использовать JDK 7 и использовать joda-time 2.10

1 Ответ

0 голосов
/ 20 сентября 2018

Joda Time не совсем соответствует y, yy или yyyy.Четный шаблон d.M.y будет анализировать 18.12.18 в допустимое время даты.

Вы можете получить более строгий анализ шаблона с java.time классами (есть бэкпорт для Java 7), например, установив ResolverStyle.STRICT:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(expectedFormat)
    .withResolverStyle(ResolverStyle.STRICT);

Выше произойдет сбой dd.MM.yyyyиз вашего примера, но он все равно позволит d.M.y разобрать 18.12.18.

...