0

文字列値を解析しようとすると、パーサー例外が発生します。

"Thursday, July 27, 2006 10:10:02 PM PST" 

フォーマットするには:

"EEEE, MMMM d, YYYY h:mm:ss a z"

これはプログラムのサンプルです:

DateTime.parse("Thursday, July 27, 2006 10:10:02 PM PDT", DateTimeFormat.forPattern("EEEE, MMMM d, yyyy h:mm:ss a z"));

そして、これはエラーメッセージです:

Invalid format: "Thursday, July 27, 2006 10:10:02 PM PDT" is malformed at "PDT"

これは私のサンプルプログラムです

String str = "Thursday, July 27, 2006 10:10:02 PM PDT"; 
DateTimeFormatter formatterDateTime = DateTimeFormat.forPattern("EEEE, MMMM d, YYYY h:mm:ss a z");
try{
    DateTime dt = DateTime.parse(str, formatterDateTime);
}catch(Exception ex)
{
    System.out.println(ex.getMessage());
}
4

4 に答える 4

1

JodaTimeドキュメントから:

ゾーン名: タイム ゾーン名 ('z') は解析できません。

ただしSimpleDateFormat、タイムゾーンの解析はサポートしています。

SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM dd, YYYY h:mm:ss aa zzz");
Date date = format.parse("Thursday, July 27, 2006 10:10:02 PM PST");
于 2013-05-15T14:02:56.070 に答える
1

marba が示唆するように、エラーは Java 6 で Java 7 固有のパターンを使用したことが原因である可能性が最も高いです。

日付を解析するためのコードは次のようになります。

SimpleDateFormat df = new SimpleDateFormat("EEEE, MMMM dd, yyyy h:mm:ss aa zzz");
Date d = df.parse("Thursday, July 27, 2006 10:10:02 PM PST");

解析された日付が提供された日付と同じであることをテストするには:

df.setTimeZone(TimeZone.getTimeZone("Pacific/Pitcairn"));
System.out.println(df.format(d));

版画:

Thursday, July 27, 2006 10:10:02 PM PST

その他のパタ​​ーンについては、 Javadocを参照してください。

于 2013-05-15T14:05:03.180 に答える
0

どのロケールを使用していますか? Locale.USへの 2 番目のパラメーターとして明示的に指定する必要があると思いますSimpleDateFormat

Joda-Time ライブラリの場合、次のコードを使用してロケールを調整できます。

DateTimeFormat.forPattern("EEEE, MMMM d, YYYY h:mm:ss a z").withLocale(Locale.US);

更新:この関連する SO questionが見つかりましSimpleDateFormatた。代わりに使用する必要があるようです。Joda-Time パーサーはタイム ゾーンをサポートしていません。

SimpleDateFormat df = new SimpleDateFormat("EEEE, MMMM d, YYYY h:mm:ss a z");
Date d = df.parse("Thursday, July 27, 2006 10:10:02 PM PDT");
于 2013-05-15T14:04:43.830 に答える