web-dev-qa-db-ja.com

日付形式解析例外-「EEE MMM dd HH:mm:ss Z yyyy」

日付解析の日付の例で問題が発生しました:

SimpleDateFormat parserSDF=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.getDefault());


parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

例外を得た

正確に私はこの形式の日付をyyyy-MM-ddに解析したいと思います:

SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");

take:Java.text.ParseException:Unparseable date: "Wed Oct 16 00:00:00 CEST 2013"


OKに変更して動作します:

SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.ENGLISH);
Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");
13
PDS

あなたがポーランドにいるように見えるので、あなたのためのLocale.getDefault()pl-PLであると仮定します。

したがって、日付文字列内の英語の単語は、解析不能な日付を引き起こします。

適切なポーランドの日付Stringは次のようになります

"Wt paź 16 00:00:00 -0500 2013"

そうでない場合は、Localeオブジェクトが英語の単語でSimpleDateFormat日付を解析できるように、StringLocale.ENGLISHに変更します。

17

あなたや他の人がしばしばどのデフォルトを知らないLocale.defaultを使用する代わりに、locale.ENGLISHを使用して決定できます。文字列の日付は英語の形式だからです。他の国にいる場合、形式は異なります。

コードの例を次に示します。

public static void main(String[] args) {
    try {
        SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH);
        Date date = parserSDF.parse("Wed Oct 16 00:00:00 CEST 2013");
        System.out.println("date: " + date.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
}

結果はdate: Wed Oct 16 05:00:00 ICT 2013になります。または、フィールドを使用して、この日付のどの部分を印刷するかを決定できます。

このヘルプを願っています:)

8
hqt

元の例外はあなたのフォーマットのZによるものだと思います。 ドキュメント

Z   Time zone   RFC 822 time zone   -0800

おそらく小文字のzを使用するつもりでした

4
Алексей