如何在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的方法已被弃用;-)时间继续前进。