私はこれを試しました:
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 docsは、4文字を使用して完全なフォームに一致させる必要があると言います。使用できるのは[〜#〜] mmm [〜#〜 ] "Jun"のような短縮された月で正常に終了しましたが、完全な形式に一致する必要があります。
テキスト:書式設定では、パターン文字の数が4以上の場合、完全な形式が使用されます。それ以外の場合は、使用可能な場合は短い形式または省略形が使用されます。解析では、パターン文字の数に関係なく、両方の形式が受け入れられます。
http://Java.Sun.com/j2se/1.6.0/docs/api/Java/text/SimpleDateFormat.html
おそらく、月の名前が「January」、「February」などではなく、現地語の他の単語であるロケールを使用しているでしょう。
使用したいロケールを指定してみてください、例えばLocale.US
:
DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
Date d = fmt.parse("June 27, 2007");
また、日付文字列に余分なスペースがありますが、実際にはこれは結果に影響しません。どちらの方法でも機能します。
これを新しい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のメソッドは非推奨であることがわかります;-)進むべき時間。