2

を使用して文字列を Date オブジェクトに変換する必要がありますSimpleDateFormat

のような文字列を 3 か月の文字とドットで "MMM. dd yyyy"解析するために使用します。"Dec. 30 2011"

失敗する"May 30 2011"ので、例外をキャッチして で再試行する必要があり"MMM dd yyyy"ます。これは「5月」で機能しますが、これまでのところ醜いですが機能します。

しかし、「2011 年 9 月 11 日」になると、上記のすべてに加え"MMMM. dd yyyy""MMMM dd yyyy"失敗します。だから全然解析できない。

何が起こっている?

4

4 に答える 4

4

このパターンを試してください -

うーん'。' dd yyyy

コード -

DateFormat df = new SimpleDateFormat("MMM'.' dd yyyy");
Date date = df.parse("Dec. 30 2011");

それがあなたを楽しくするのに役立つことを願っています:)

于 2013-09-28T20:02:49.190 に答える
4

私だったら、さまざまなパターンを試して例外処理に頼る代わりに、最初の 3 文字をサブストリング化し、最後の 7 文字を追加して、MMMdd yyyy.

于 2013-09-28T20:30:20.847 に答える
1

Java は、3 文字の略語 ( as MMM) または完全な月名 ( as MMMM) のみを解析できます。

入力を 3 文字の略語に変換する必要があります。最も簡単な方法は、正規表現を使用することです。

解析してクリーンアップする前に、次の行を実行します。

str = str.replaceAll("(?<=^...)\\w+\\.?", "");

Sep 11 2011これはからあなたをあきらめますがSept. 11 2011、すでに適切な入力はそのままにしておきます。また、ピリオドの有無にかかわらず、任意の長さの略語をクリーンアップします。用途が広いです。

その後、既存のフォーマット文字列を使用して解析できます。

于 2013-09-28T20:37:17.290 に答える
1

寛容な日付解析のためのすぐに使えるソリューションはないと思います。JDK も頻繁に使用される Joda Time ライブラリも、これを直接サポートしていません。しかし、成功する (または失敗する) まで、さまざまな日付形式を試すヘルパー メソッドを作成するのは比較的簡単なはずです。

private static final DateFormat[] FORMATS = new DateFormat[] {
    new SimpleDateFormat("MM. dd yy"),
    new SimpleDateFormat("MMM. dd yy"),
    new SimpleDateFormat("MMM dd yy")  };

public static synchronized Date parse(String dateString) throws ParseException {
    ParseException e = null;

    for(DateFormat format : FORMATS) try {
        return format.parse(dateString);
    } catch (ParseException ex) {
        if (e == null || e.getErrorOffset() < ex.getErrorOffset()) e = ex;
    }

    throw e;
}
于 2013-09-28T20:21:40.150 に答える