Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检测日历上的无效日期。设置()_Java_Date - Fatal编程技术网

Java 检测日历上的无效日期。设置()

Java 检测日历上的无效日期。设置(),java,date,Java,Date,我有一个方法,它返回一个日期(),由它的一个“字段”(日、月、年)更改 但是,当我们试图设置的字段与讨论中的日期不兼容时,cal.set()无法给出异常。因此,在这种情况下: Date date = new Date(); date = getDateChanged(date, Calendar.DAY_OF_MONTH, 29); date = getDateChanged(date, Calendar.MONTH, 1); // feb 日期最终是2015年3月1日,因为Calendar

我有一个方法,它返回一个日期(),由它的一个“字段”(日、月、年)更改

但是,当我们试图设置的字段与讨论中的日期不兼容时,cal.set()无法给出异常。因此,在这种情况下:

Date date = new Date();
date = getDateChanged(date, Calendar.DAY_OF_MONTH, 29); 
date = getDateChanged(date, Calendar.MONTH, 1); // feb
日期最终是2015年3月1日,因为Calendar.set()检测到二月不能设置为第29天,所以自动将日期设置为下一个可能的日期(我认为这就是例程的工作方式)

这还不算太糟,但就我而言

我想检测我试图建立的日期是不可能的,然后开始减少日期,所以在这种情况下,我试图实现的是2015年2月28日,我该怎么做

例如:

2015年2月29日==>2015年2月28日


您可以使用
cal.getActualMaximum(Calendar.DAY\u OF\u MONTH)
查找日历实例在给定月份的最大天数

这样,你就可以自己处理上面提到的案件了


另请参见此处的答案:

您可以使用以下方法检查最大值:

您可以使用:

public void setLenient(boolean lenient)
指定日期/时间解释是否宽松。 在宽大的解释下,诸如“1996年2月942日”之类的日期将被删除 被视为相当于2月1日后的第941天, 1996在严格(不宽容)的解释下,此类日期将导致抛出异常。默认为宽松


这样,当您传递错误消息时会出现异常:)

此解决方案可能会对您有所帮助

public static Date getDateChanged(Date date, int field, int value) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(field, value);
    if (field == Calendar.MONTH && cal.get(Calendar.MONTH) != value) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int month = (cal.get(Calendar.MONTH) - 1) < 0 ? 0 : (cal.get(Calendar.MONTH) - 1);
        calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DATE));
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        return calendar.getTime();
    }
    return cal.getTime();
}
publicstaticdategetdatechanged(日期、整型字段、整型值){
Calendar cal=Calendar.getInstance();
校准设定时间(日期);
校准设置(字段、值);
if(field==Calendar.MONTH&&cal.get(Calendar.MONTH)!=value){
日历=Calendar.getInstance();
日历。设置时间(日期);
int month=(计算获取(日历月)-1)<0?0:(计算获取(日历月)-1);
calendar.set(calendar.DATE,calendar.getActualMinimum(calendar.DATE));
calendar.set(calendar.MONTH,MONTH);
calendar.set(calendar.DATE,calendar.getActualMaximum(calendar.DATE));
返回calendar.getTime();
}
返回cal.getTime();
}

我想他不希望有例外他说:“我想检测我试图建立的日期是不可能的,然后开始减少一天。”。抛出异常是确定某事不可能的一种方法。此外,他还可以抓住它并在此基础上做其他事情。如果不是例外,则将日期(此处为29/2/15)添加为下一个日期(01/03/15),但此处他希望添加28/2/15@波尔斯卡,如果我错了,请纠正我好吧,如果他把旗子打错了,就会有例外。然后,他可以将数字减少一,然后再试一次,或者做一些其他事情,最终确定正确的日期。
public void setLenient(boolean lenient)
Parameters:
    lenient - true if the lenient mode is to be turned on; false if it is to be turned off.
See Also:
    isLenient(), DateFormat.setLenient(boolean)
public static Date getDateChanged(Date date, int field, int value) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(field, value);
    if (field == Calendar.MONTH && cal.get(Calendar.MONTH) != value) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int month = (cal.get(Calendar.MONTH) - 1) < 0 ? 0 : (cal.get(Calendar.MONTH) - 1);
        calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DATE));
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        return calendar.getTime();
    }
    return cal.getTime();
}