Введите месяц в регистре, используемом в вашей локали
Поскольку ваша программа стоит в вопросе, пользователь должен ввести месяц в ожидаемом регистре, например, в верхнем регистре F
и в нижнем регистре ebruary
дляфевраль.(Изменить :) Буква шаблона в верхнем регистре M
используется для месяца, а строчная m
означает минуты.Поэтому M
s в строке шаблона формата должны быть в верхнем регистре, даже если вы не должны печатать месяц таким образом, и он также не форматируется в верхнем регистре, если вы форматируете дату обратно в строку.
Совет. Если синтаксический анализ с использованием средства форматирования не работает, попробуйте отформатировать значение с тем же средством форматирования, чтобы увидеть, как будет выглядеть ваша входная строка.Например:
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern(dateFormat, Locale.forLanguageTag("en-IE"));
System.out.println(LocalDate.now(ZoneId.of("Europe/Dublin")).format(formatter));
Пример вывода:
17 октября 2018
Здесь вы можете видеть, что месяц не в верхнем регистре.
Совет 2: дайте явный языковой стандарт для вашего средства форматирования, чтобы вы знали, что он также будет работать должным образом на компьютерах с другим языковым стандартом по умолчанию, и если однажды вам удастся поиграть с настройкой языкового стандарта вашего компьютера.
Чтобы принять месяц в верхнем регистре
Я не думаю, что это было то, что вы хотели, но ради полноты: чтобы позволить месяцу вводиться всеми заглавными буквами, используйте DateTimeFormatterBuilder
и егоparseCaseInsensitive
метод, подобный следующему:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(dateFormat)
.toFormatter(Locale.forLanguageTag("en-IE"));
С этим изменением приведен пример сеанса:
Enter a date: FEBRUARY 27, 1999
Date entered was: 1999-02-27
There are19years7months19days
Дата выводится в формате ISO 8601 для календарной даты.И я считаю, что расчет периода является правильным.
Ссылка
DateTimeFormatter
документация , где вы можете увидеть строчные и прописные буквы образца и изучить разницу между m
и M
, d
и D
и y
и Y
.