2016-08-02 56 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); 
} 

但它失敗。它返回一個日期而不是null,但"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; 
    } 
} 

現在,它會拋出ParseException


official documentation

公共無效setLenient(布爾寬鬆)

指定日期/時間解析是否是寬鬆的。通過 從寬分析,解析器可以使用啓發式來解釋不精確匹配此對象格式的輸入 。通過嚴格的解析, 輸入必須匹配此對象的格式。

+0

是的,它現在有效。謝謝!我會在5分鐘內接受。 –

相關問題