Как разобрать строку полной формы месяца с помощью DateFormat в Java?

StackOverflow https://stackoverflow.com/questions/2219139

  •  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));

Немного более подробный, но вы также видите, что используемые методы определения даты устарели ;-) Пора двигаться дальше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top