Подтвердить что ты не робот

Как анализировать полную длину строки в формате DateFormat в Java?

Я попробовал это:

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 говорится, что я должен использовать четыре символа, чтобы соответствовать полной форме. Я могу успешно использовать MMM только с сокращенными месяцами, такими как "июнь", но мне нужно соответствовать полной форме.

Текст: для форматирования, если количество букв шаблона составляет 4 или более, используется полная форма; в противном случае используется короткая или сокращенная форма, если таковая имеется. Для синтаксического анализа принимаются обе формы, независимо от количества букв шаблона.

http://java.sun.com/j2se/1.6.0/docs/api/java/text/SimpleDateFormat.html

4b9b3361

Ответ 1

Вероятно, вы используете локаль, где имена месяцев не являются "Январь", "Февраль" и т.д., но некоторые другие слова на вашем локальном языке.

Попробуйте указать язык, который вы хотите использовать, например Locale.US:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
Date d = fmt.parse("June 27,  2007");

Кроме того, у вас есть дополнительное пространство в строке даты, но на самом деле это не влияет на результат. Он работает в любом случае.

Ответ 2

Только для того, чтобы перейти к новому API Java 8:

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

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