我想在MM-dd格式解析字符串到Java日期。由於未指定年份,因此解析日期應該在當年。只應該解析有效的日期字符串,所以我應該在SimpleDateFormat
中使用setLenient(false)
。解析日期字符串(MM-DD)到Java日期默認年
public static Date parseDate(String ds) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("MM-dd");
df.setLenient(false);
Date d = df.parse(ds);
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
cal.setTime(d);
cal.set(Calendar.YEAR, year);
return cal.getTime();
}
這似乎很好,直到我通過一個參數「02-29」。今年(2012年)是閏年,2012-02-29是有效日期,「02-29」應該已經解析成功。
我發現當我沒有在SimpleDateFormat
中指定年份時,它解析到1970年。而1970年不是閏年,「02-29」未能解析。因此,解析到1970年的日期並且在解析策略之後設置當年並不完美。
什麼是解析MM-dd格式的字符串到日期的最好方式在Java中(日期應設置爲當前年度)?
PS1:我搜索了這個話題,發現這個網站的許多的問題和答案,但我無法找到滿意的答案。 PS2:df.setLenient(false);
是很重要的,因爲只有有效的日期字符串應該被成功解析。不應該分析無效的日期字符串,如「01-32」,「02-30」等。
在此先感謝。
你可以使用「YYYY-MM-DD」,並解析它之前添加實際一年的字符串。 – 2012-07-15 16:31:33
你能解釋爲什麼你只是不接受我的答案? – 2012-12-31 17:20:10