Получение даты в соответствии с форматом, в котором название месяца идет первым - PullRequest
0 голосов
/ 11 сентября 2018

Я получаю строку в этом формате, как показано ниже

03-12-2018

Я хочу преобразовать ее в приведенный ниже формат в соответствии со стандартами Java 8, пожалуйста, сообщите

December 03 , 2018  

что у меня естьпопробовал показано ниже, но я не увенчался успехом, пожалуйста, посоветуйте, как добиться того же

SimpleDateFormat month_date = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    String actualDate = "03-12-2018";

    Date date = sdf.parse(actualDate);

    String month_name = month_date.format(date);
    System.out.println("Month :" + month_name);  

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Используйте следующий код:

SimpleDateFormat month_date = new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");

String actualDate = "03-12-2018";

Date date = sdf.parse(actualDate);

String month_name = month_date.format(date);
System.out.println("Month :" + month_name);
0 голосов
/ 12 сентября 2018

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.

0 голосов
/ 11 сентября 2018

Это просто вопрос выбора правильного формата (и применения правильного Locale):

 DateTimeFormatter f = DateTimeFormatter.ofPattern("LLLL dd, yyyy");
 System.out.println(f.format(yourDate));

Кстати, он находится в документации :

... Число / Текст: Если количество букв шаблона составляет 3 или больше, используйте текстовые правила выше.В противном случае используйте приведенные выше правила нумерации....

...