Преобразование строки в дату

Рейтинг: 2Ответов: 1Опубликовано: 23.12.2014

Доброго времени суток!

Подскажите, в чем может быть проблема. Мне нужно преобразовать паттерн вида "dd MMM yyyy" в LocalDate, но постоянно выбрасывает, с одной стороны, понятный, с другой - непонятный эксепшен "Text '16 Sep 2006' could not be parsed at index 3".

 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 ...

 String date1 = "16 Sep 2006";
 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy");
 LocalDate dateLocal = LocalDate.parse(date1, formatter);

Пробовал разные вариации паттернов, но всегда одно и то же, вроде ведь должно работать. :/

Ответы

▲ 2Принят

После недолгих изысканий оказалось, что в случае с DateTimeFormatter, помимо шаблона, нужно указывать еще и стиль форматирования, если в строке встречаются буквенные обозначения месяца или дня. Также важно заметить, что если строка только в числовом виде, то стиль форматирования можно не указывать. Вот такие отличия от простого DateFormatter, где достаточно только шаблона.

Спасибо участнику Barmaley, навел на нужную мысль про Locale.

Вариант 1:

java.util.Locale locale = java.util.Locale.US;
String input = "January 2, 2010";
String pattern = "MMMM d, yyyy";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern,locale);
LocalDate dateLocal = LocalDate.parse(input, formatter); 

Вариант 2:

 String input = "16 Sep 2006";
 String pattern = "dd MMM yyyy";
 //Далее, как с Вариантом 1