我有这个方法,它返回一个由其中一个“字段”(日、月、年)更改的 Date()。
public static Date getDateChanged(Date date, int field, int value) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(field, value);
return cal.getTime();
}
但是,当我们尝试设置的字段与相关日期不兼容时,cal.set() 无法给出异常。因此,在这种情况下:
Date date = new Date();
date = getDateChanged(date, Calendar.DAY_OF_MONTH, 29);
date = getDateChanged(date, Calendar.MONTH, 1); // feb
日期最终是 01/03/15,因为 Calendar.set() 检测到二月不能设置为第 29 天,所以自动将日期设置为下一个可能的日期(我认为这就是日常工作)。
这还不错,但是就我而言,
我想检测到我尝试构建的日期是不可能的,然后开始递减日期,因此在本例中我想要实现的是 28/02/15,我该怎么做?
示例:
29/02/15 ===> 28/02/15
最佳答案
您可以使用 cal.getActualMaximum(Calendar.DAY_OF_MONTH)
查找给定月份中日历实例的最大天数。
这样,您就可以自己处理上面提到的情况了。
另请参阅此处的答案:Number of days in particular month of particular year?
关于java - 检测 Calendar.set() 上的无效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31719190/