我想将 MM-dd 格式的字符串解析为 java 日期。由于未指定年份,因此解析日期应为当年。应该只解析有效的日期字符串,所以我应该使用setLenient(false)
in 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 年的日期并在解析策略后设置当前年份并不完美。
在 Java 中解析 MM-dd 格式字符串到日期(日期应设置为当前年份)的最佳方法是什么?
PS1:我搜索了这个话题,在本站找到了很多问题和答案,但都没有找到满意的答案。PS2:df.setLenient(false);
很重要,因为只有有效的日期字符串才能成功解析。不应解析“01-32”、“02-30”等无效日期字符串。
提前致谢。