2016-08-02 13 views
2

私は日にビッグエンディアン日付文字列を解析するには、このコードを持っている:DateFormatで日付を解析する理由は何ですか?

public static final Date fromBigEndian(String dateBigEndian) { 
    DateFormat bigEndianFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    try { 
     return bigEndianFormat.parse(dateBigEndian); 
    } catch (ParseException e) { 
     return null; 
    } 
} 

と、このテストケース:

@Test 
public void returnNullIfDoesNotMatchBigEndianFormat() { 
    String nonBigEndianDate = "01-06-2016"; 
    Date parsedDate = DateUtil.fromBigEndian(nonBigEndianDate);  
    assertNull(parsedDate); 
} 

をしかし、それは失敗します。ヌルの代わりに日付を返しますが、形式が"01-06-2016"の場合、パターン"yyyy-MM-dd"と一致しません。なぜメソッドがParseExceptionを投げないのですか?

+1

「Date」オブジェクトには何が含まれていますか? –

+1

'DateFormat.parse()'のjavadocに注意してください。source - **先頭の**を解析する必要のある文字列。 ... ParseException - 指定された文字列の先頭の**を解析できない場合 –

+0

@krzyk [demo](http://ideone.com/7fZ00p)。それは不思議です – BackSlash

答えて

4

あなたはDateFormat.setLenient(false)を使用する必要があります。

public static final Date fromBigEndian(String dateBigEndian) { 
    DateFormat bigEndianFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    bigEndianFormat.setLenient(false); 
    try { 
     return bigEndianFormat.parse(dateBigEndian); 
    } catch (ParseException e) { 
     return null; 
    } 
} 

今ではofficial documentationからParseException


がスローされます。

公共ボイドsetLenient(ブール寛大)

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

+0

はい、今動作します。ありがとう!私は5分で受け入れます。 –

関連する問題