В комментариях говорится, что в сентябре действительно 30 дней.Причина, по которой этот код не вызывает ошибку при разборе неверной даты, заключается в том, что DateFormatter по умолчанию снисходителен, что означает, что вы можете передать его в сентябре 64 2018 года, и он с радостью проанализирует его для вас и даст правильную дату эпохи.
Вы можете заставить DateFormatter выдавать ошибку в неправильные даты, добавив строгий стиль решателя, например так:
DateTimeFormatter
.ofPattern(DATE_PATTERN, Locale("en", "US"))
.withResolverStyle(ResolverStyle.STRICT)
Это приведет к следующей ошибке при разборе указанной даты:
Text 'September 31, 2018' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {YearOfEra=2018, MonthOfYear=9, DayOfMonth=31},ISO of type java.time.format.Parsed