我想在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