Как разобрать строку полной формы месяца с использованием DateFormat в Java? - PullRequest
49 голосов
/ 08 февраля 2010

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

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 с сокращенными месяцами, такими как "Jun" , но мне нужно соответствовать полной форме.

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

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

Ответы [ 2 ]

114 голосов
/ 08 февраля 2010

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

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

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

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

2 голосов
/ 12 марта 2015

Просто чтобы добавить это к новому 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 устарели ;-) Время двигаться дальше.*

...