Java 检测日历上的无效日期。设置()
我有一个方法,它返回一个日期(),由它的一个“字段”(日、月、年)更改 但是,当我们试图设置的字段与讨论中的日期不兼容时,cal.set()无法给出异常。因此,在这种情况下: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
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();
}