java.time
DateTimeFormatter originalFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
DateTimeFormatter monthFirst = DateTimeFormatter
.ofLocalizedDate(FormatStyle.LONG)
.withLocale(Locale.ENGLISH);
String actualDate = "03-12-2018";
LocalDate date = LocalDate.parse(actualDate, originalFormatter);
String monthName = date.format(monthFirst);
System.out.println("Month :" + monthName);
Вывод:
Месяц: 3 декабря 2018
Поскольку вы используете Java 8 (и дажеесли вы этого не сделали), избегайте давно устаревшего и печально известного класса SimpleDateFormat
.Используйте встроенные форматы там, где это возможно, вместо того, чтобы переходить на собственные.
Что пошло не так в вашем коде?
Вы проанализировали строку 03-12-2018
с форматом yyyy-MM-dd
.Таким образом, это переходит в 2018-й день 12-го месяца 3-го года нашей эры (2015 года назад).В декабре явно не было 2018 дней.Так что было бы справедливо ожидать исключения.Это только одна из причин, по которой SimpleDateFormat
проблематичен: при стандартных настройках он просто продолжает считать дни в следующих месяцах и годах и заканчивается 9 июня 9 года, то есть 5 с половиной лет спустя.Затем вы отформатировали эту дату с помощью средства форматирования, включающего название месяца и год. Похоже, вы забыли день месяца.В любом случае он печатается как Jun 0009
(что вы должны были сказать нам в своем вопросе, чтобы мы могли видеть, что было не так; эта информация может быть очень полезна при попытке решить вашу проблему).
Ссылка
Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time
.