== 31 February under three resolver styles (pattern dd-MM-uuuu) == STRICT DateTimeParseException: Text '31-02-2026' could not be parsed: Invalid date 'FEBRUARY 31' SMART 2026-02-28 LENIENT 2026-03-03 == 30 February and 32 January == SMART 30-02-2026 2026-02-28 SMART 32-01-2026 DateTimeParseException: Text '32-01-2026' could not be parsed: Invalid value for DayOfMonth (valid values 1 - 28/31): 32 == STRICT with yyyy: year-of-era needs an era, so it cannot resolve == yyyy DateTimeParseException: Text '14-11-2026' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {MonthOfYear=11, DayOfMonth=14, YearOfEra=2026},ISO of type java.time.format.Parsed uuuu 2026-11-14 == how many digits? MM wants two, M accepts one or two == yyyy-MM-dd 2026-1-5 DateTimeParseException: Text '2026-1-5' could not be parsed at index 5 yyyy-M-d 2026-1-5 2026-01-05 yyyy-M-d 2026-01-05 2026-01-05 == two-digit years are read as 2000-2099 == 01-01-30 -> 2030-01-01 01-01-99 -> 2099-01-01 == month names are case-sensitive unless you say otherwise == 14 Nov 2026 2026-11-14 14 NOV 2026 DateTimeParseException: Text '14 NOV 2026' could not be parsed at index 3 14 NOV 2026 (parseCaseInsensitive) 2026-11-14 == the old SimpleDateFormat, same 31-02-2026 == lenient (default): Tue Mar 03 00:00:00 IST 2026 setLenient(false): ParseException: Unparseable date: "31-02-2026"