5

SimpleDateFormat:

SimpleDateFormat pdf = new SimpleDateFormat("MM dd yyyy hh:mm:ss:SSSaa");

によってスローされる例外pdf.parse("Mar 30 2010 5:27:40:140PM");

java.text.ParseException: Unparseable date: "Mar 30 2010 5:27:40:140PM"

何か案は?


編集:迅速な回答に感謝します。あなたはすべて正しかった、私はSimpleDateFormatドキュメントのその1つの重要な文を見逃しただけです-私はおそらくそれを1日と呼ぶべきです。

4

4 に答える 4

11

まず、3文字の月はで表されMMMます。次に、1〜2桁の時間は。で表されhます。第三に、Mar英語のようです。指定する必要がありLocale.ENGLISHます。指定しないと、デフォルトのロケールが異なるマシンでは正しく機能しません。

次の作品:

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy h:mm:ss:SSSa", Locale.ENGLISH);
System.out.println(sdf.parse("Mar 30 2010 5:27:40:140PM"));

結果(私はGMT-4にいます。DSTなし):

2010年3月30日火曜日17:27:40BOT

java.text.SimpleDateFormatjavadocも参照してください。

あなたがそれを呼んだ理由pdfは私を超えているので、私はそれを名前変更しましたsdf;)

于 2010-04-08T21:45:22.017 に答える
8

SimpleDateFormat javadocsから:

月:パターン文字の数が3以上の場合、月はテキストとして解釈されます。それ以外の場合は、数値として解釈されます。

「MMMddyyyy」のようなパターンを使用してみてください

于 2010-04-08T21:42:57.360 に答える
6

MMは数値の月を表します。MMMを使用します。

于 2010-04-08T21:42:15.430 に答える
0

java.time

私は現代的な答えを提供しています。他の答えは正しいですが、SimpleDateFormatあなたが使用したクラスは、悪名高く面倒で、長い間時代遅れです。代わりに、最新の優れたJava日時APIであるjava.timeを使用しています。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            "MMM d uuuu h:mm:ss:SSSa", Locale.ROOT);
    String dateTimeString = "Mar 30 2010 5:27:40:140PM";
    LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);
    System.out.println(dateTime);

出力:

2010-03-30T17:27:40.140

リンク: Oracleチュートリアル: java.timeの使用方法を説明する日時。

于 2019-11-14T05:16:34.277 に答える