Как разобрать строку полной формы месяца с помощью DateFormat в Java?
-
19-09-2019 - |
Вопрос
Я попробовал это:
DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy");
Date d = fmt.parse("June 27, 2007");
ошибка:
Exception in thread "main" java.text.ParseException: Unparseable date: "June 27, 2007"
В Java docs говорится, что я должен использовать четыре символа, чтобы соответствовать полной форме.Я могу только использовать МММ успешно с сокращенными месяцами, такими как "Июнь" но мне нужно соответствовать полной форме.
Текст:Для форматирования, если количество букв шаблона равно 4 или более, используется полная форма;в противном случае используется краткая или сокращенная форма, если таковая имеется.Для синтаксического анализа принимаются обе формы, независимо от количества букв шаблона.
http://java.sun.com/j2se/1.6.0/docs/api/java/text/SimpleDateFormat.html
Решение
Вероятно, вы используете язык, в котором названия месяцев не являются "Январь", "февраль" и т.д.но несколько других слов на вашем местном языке.
Попробуйте указать язык, который вы хотите использовать, например Locale.US
:
DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
Date d = fmt.parse("June 27, 2007");
Кроме того, у вас есть дополнительный пробел в строке даты, но на самом деле это никак не влияет на результат.Это работает в любом случае.
Другие советы
Просто в довершение всего к новому Java 8 API:
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("MMMM dd, yyyy").toFormatter();
TemporalAccessor ta = formatter.parse("June 27, 2007");
Instant instant = LocalDate.from(ta).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date d = Date.from(instant);
assertThat(d.getYear(), is(107));
assertThat(d.getMonth(), is(5));
Немного более подробный, но вы также видите, что используемые методы определения даты устарели ;-) Пора двигаться дальше.