java - 检测 Calendar.set() 上的无效日期

标签 java date

我有这个方法,它返回一个由其中一个“字段”(日、月、年)更改的 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/

相关文章:

java - onPostExecute 不会被触发

java - 重用 JSON 对象

android - 比较android sqlite数据库中的日期(存储为字符串)?

MySQL 使用 DD-MM-YYYY 日期格式过滤记录集

r - 如何从字符串变量中提取和翻译月份

javascript - Flot 工具提示中显示的日期不正确

java.lang.NoClassDefFoundError : com/sun/star/lang/XEventListener

java - 我怎样才能从不同的类(class)到达进度条?

JavaScript 根据日期更改表行类

java - "delegation"如何帮助线程安全类?