因為最近比較閑 有點不思進取 也沒什么問題要寫了
今天不錯,發(fā)現(xiàn)一個,恩,感覺不錯
做了一個上傳Excel并解析數(shù)據(jù)然后入庫的功能,里面涉及到是否是日期格式的判斷
之前是這么寫的(深諳這么寫是不好的,但以為它是可靠的)
private boolean checkDate(String content) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
sdf.parse(content);
return true;
} catch (Exception e){
return false;
}
}
現(xiàn)在發(fā)現(xiàn)問題了,對于“2008-06-23asdf”這種情況是返回true的,哈哈,看來是孤陋寡聞了,基礎(chǔ)不扎實了,看API上這樣講:
在默認情況下,進行的分析是不嚴格的:如果輸入的形式不是此對象的格式化方法使用的形式,但仍可作為日期進行分析,則分析將獲得成功。客戶機可能通過調(diào)用 setLenient(false) 來強調(diào)嚴格遵守該格式。
按照API說法,將代碼改成
private boolean checkDate(String content) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
sdf. setLenient(false);
sdf.parse(content);
return true;
} catch (Exception e){
return false;
}
}
運行結(jié)果“2008-06-23asdf”這種情況還是返回true的,但“2008-13-23”這種情況是返回false的
最后改進程這種寫法,可以適應(yīng)"yyyy-MM-dd""yyyy-M-d""yyyy-MM-d""yyyy-M-dd"
private boolean checkDate(String content) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
try {
sdf.setLenient(false);
content = content.replaceAll("-0", "-");
Date d = sdf.parse(content);
String s = sdf.format(d);
return content.equals(s);
} catch (Exception e){
return false;
}
}
參考資料http://www.99inf.net/SoftwareDev/Java/52734.htm
http://blog.163.com/everlee@126/blog/static/263574220089822631229/
當然也可以用正則表達式做到。