如何在Java中使用DateFormatparsing月份完整的表单string?

我试过了

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或更多,则使用完整格式; 否则使用简短或缩写forms。 对于parsing,这两种forms都被接受,与模式字母的数量无关。

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

另外,在datestring中有一个额外的空间,但实际上这对结果没有影响。 它以任何方式工作。

为了达到最新的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)); 

有点更详细,但你也看到,使用date的方法已被弃用;-)时间继续前进。