Используйте формат M/d/yyyy
, потому что начальные нули игнорируются.MM/dd/yyyy
подразумевает, что требуется ровно две цифры, включая возможный начальный ноль.
DateTimeFormatter parseformat =
DateTimeFormatter.ofPattern("M/d/yyyy");
DateTimeFormatter outputformat = DateTimeFormatter.ofPattern("MM/dd/yyyy");
Для сегмента кода
String d1 = "1/1/2018";
String d2 = "02/29/2016";
String d3 = "4/01/2018";
LocalDate date = LocalDate.parse(d1, parseformat);
System.out.println(date.format(outputformat));
date = LocalDate.parse(d2, parseformat);
System.out.println(date.format(outputformat));
date = LocalDate.parse(d3, parseformat);
System.out.println(date.format(outputformat));
Я получил
01/01/2018
02/29/2016
04/01/2018
как и ожидалось.
См. Документацию SimpleDateFormat для временных шаблонов и того, как они анализируются;обратите внимание, что «буквы шаблона обычно повторяются, так как их число определяет точное представление» и что «при разборе количество букв шаблона игнорируется, если только не требуется разделять два смежных поля» (здесь вы разделяете два смежных поля).