我想在MM-dd格式解析字符串到Java日期。 由于未指定年份,解析日期应该是在当前年份。 只有有效的日期字符串应该被解析,所以我应该用setLenient(false)
在SimpleDateFormat
。
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”,“2月30日”等不应该被解析。
提前致谢。