Как анализировать полную длину строки в формате 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
Ответы
Ответ 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 используются устаревшие;-) Время для перемещения.