3

私は次のスニペットを持っています

Date date=null;
    SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
    try {
        date= sdf.parse("2001-02-2012");
        System.out.println(date);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }

不思議なことに、解析例外はスローされませんね。

4

3 に答える 3

3

問題は、入力が予期しないものであることです。次に、SimpleDateFormat はとにかく便利な方法でそれを解釈しようとします。したがって、あなたの場合、2001単純に週、月、年に変換される日があります。あなたの日付はMon Jul 24 00:00:00 GMT 2017です。これは ideone で確認できます: http://ideone.com/bfgogz

それを「修正」するには、 を追加して、sdf.setLenient(false);指定したとおりの入力のみを受け入れることができます。

于 2013-02-12T09:53:07.863 に答える
2

ParseException寛大に解析しない とスローされます。厳密な解析DateFormat#setLenient(false)も知っています。

日付/時刻の解析を緩くするかどうかを指定します。緩やかな解析では、パーサーはヒューリスティックを使用して、このオブジェクトの形式と正確に一致しない入力を解釈する場合があります。厳密な解析では、入力はこのオブジェクトの形式と一致する必要があります。

ドキュメンテーション-

SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
sdf.setLenient(false);
try{
    date = sdf.parse("2001-02-2012");
    System.out.println(date);
} catch (ParseException ex) {
    ex.printStackTrace();
}

結果 -

java.text.ParseException: Unparseable date: "2001-02-2012"

注: デフォルトDateformat/SimpleDateFormatでは、寛大に解析します。

于 2013-02-12T09:50:35.293 に答える