解析日期字符串(MM-DD)到Java日期默认年(Parsing date string (MM-d

2019-09-19 12:07发布

我想在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日”等不应该被解析。

提前致谢。

Answer 1:

这也算是一个小哈克,但你总是可以只钉年到日期字符串的结尾解析,这样才:

ds += "-" + Calendar.getInstance().get(Calendar.YEAR);
SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy");
// Parse date as usual


Answer 2:

从日历获得一年你在代码中做,设置解析格式字符串MM-dd-yyyy然后做

 Date d = df.parse(ds + "-" + year);


文章来源: Parsing date string (MM-dd) to java date in default year