日期轉換:Cannot format given Object as a Date (SimpleDateFormat的parse和format)
阿新 • • 發佈:2019-02-14
1.錯誤資訊
Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at .....QxtMessageUtils.main(QxtMessageUtils.java:210)
2.錯誤分析與錯誤解決
錯誤分析:
原始碼
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
LOGGER.info(sdf.format("20180208120005"));
LOGGER.info(sdf.parse("20180208120005").getTime());
本意,第一句日誌列印格式化的日期,第二句列印時間戳。
手誤把sdf.parse寫成了sdf.format,導致第一句日誌報錯。
錯誤解決:
將sdf.format修改成sdf.parse即可。執行結果如下:
2018-02-27 17:03:40 INFO QxtMessageUtils:210 - Thu Feb 08 12:00:05 CST 2018
2018-02-27 17:03:40 INFO QxtMessageUtils:211 - 1518062405000
3.引申:SimpleDateFormat.parse與SimpleDateFormat.format的區別
SimpleDateFormat.parse方法如下:
public Date parse(String source) throws ParseException
{
ParsePosition pos = new ParsePosition(0);
Date result = parse(source, pos);
if (pos.index == 0)
throw new ParseException("Unparseable date: \"" + source + "\"" ,
pos.errorIndex);
return result;
}
SimpleDateFormat.parse的作用是將格式化的字串轉換成Date值。
SimpleDateFormat.format方法如下:
public final String format(Date date)
{
return format(date, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
}
SimpleDateFormat.format的作用是將Date值轉換成格式化的字串。
一定要注意parse和format的區別,尤其是引數型別和返回型別。