Java 比较日期时的ClassCastException?
我正在使用GXT/ExtGWT。我有下面比较两个日期的代码Java 比较日期时的ClassCastException?,java,gwt,gxt,Java,Gwt,Gxt,我正在使用GXT/ExtGWT。我有下面比较两个日期的代码 private DateField startDateField = new DateField(); private DateField endDateField = new DateField(); Date date = new Date(); CalendarUtil.addDaysToDate(date, -1); startDateField.setValue(date); endDateField.setValue(ne
private DateField startDateField = new DateField();
private DateField endDateField = new DateField();
Date date = new Date();
CalendarUtil.addDaysToDate(date, -1);
startDateField.setValue(date);
endDateField.setValue(new Date());
Date fromDate = startDateField.getValue();
Date toDate = endDateField.getValue();
Date differenceBetweenDates = new Date(fromDate.getTime());
CalendarUtil.addMonthsToDate(differenceBetweenDates, 6);
if (differenceBetweenDates.before(toDate)) {
MessageBox.alert("Alert","Date range should not exceed six months", null);
return false;
} else{
return true;
}
在这里的日期字段中,从日期I选择为0012-12-30
,到日期为0012-12-31
当执行(toDate)之前的行DifferenceBeween.before时,我得到下面的异常。请帮帮我。我做错什么了吗
java.lang.ClassCastException: sun.util.calendar.JulianCalendar$Date cannot be cast to sun.util.calendar.Gregorian$Date
你的约会解析有问题。有些人认为你打算根据凯撒的儒略历法来代表时间!除非你是正统派,否则我怀疑你的意图endDateField
内部存在一些问题,即使用完全错误的日历处理日期。您的日期解析存在一些问题。有些人认为你打算根据凯撒的儒略历法来代表时间!除非你是正统派,否则我怀疑你的意图endDateField
内部存在一些问题,即使用完全错误的日历处理日期。根据,java.util.Date包含以下代码:
private static final BaseCalendar getCalendarSystem(long utc) {
// Quickly check if the time stamp given by `utc' is the Epoch
// or later. If it's before 1970, we convert the cutover to
// local time to compare.
if (utc >= 0
|| utc >= GregorianCalendar.DEFAULT_GREGORIAN_CUTOVER
- TimeZone.getDefaultRef().getOffset(utc)) {
return gcal;
}
return getJulianCalendar();
}
所以在我看来,因为您将年份作为0012而不是2012,所以它选择了JulianCalendar。根据,java.util.Date包含以下代码:
private static final BaseCalendar getCalendarSystem(long utc) {
// Quickly check if the time stamp given by `utc' is the Epoch
// or later. If it's before 1970, we convert the cutover to
// local time to compare.
if (utc >= 0
|| utc >= GregorianCalendar.DEFAULT_GREGORIAN_CUTOVER
- TimeZone.getDefaultRef().getOffset(utc)) {
return gcal;
}
return getJulianCalendar();
}
因此,在我看来,因为您将年份输入为0012而不是2012年,所以它选择了JulianCalendar。我有同样的问题,但用于不同的用例(日期确实来自用户输入,但数据源是Excel表)
一个非常简单的解决方法帮了我的忙:
private static boolean isBefore(Date firstDate, Date secondDate) {
return firstDate.getTime() < secondDate.getTime();
}
private静态布尔值isBefore(日期firstDate,日期secondDate){
返回firstDate.getTime()
我也有同样的问题,但用于不同的用例(日期确实来自用户输入,但数据源是Excel表)
一个非常简单的解决方法帮了我的忙:
private static boolean isBefore(Date firstDate, Date secondDate) {
return firstDate.getTime() < secondDate.getTime();
}
private静态布尔值isBefore(日期firstDate,日期secondDate){
返回firstDate.getTime()
您在哪个行号收到异常?您好,谢谢您的回复。下面是我收到异常的行。if(differenceBetweenDates.before(toDate))。您收到异常的行号是什么?您好,谢谢您的回复。下面是我得到一个例外的一行。if(differencebetween.before(toDate))。嗨,保罗,谢谢你的回复。请告诉我在这种情况下什么应该是更好的解决方案。感谢您将选择选项改为2012,而不是12,或者在两个日期变量中将2000添加到年份中。嗨,Paul,问题是datefield是可编辑的,因此用户可以编辑任何日期。我们唯一的验证是日期应为yyyy-mm-dd格式。首先要检查的是,如果您在2012-12-30和2012-12-31中输入,您不会看到异常。您是否可以添加验证规则,或者是否可以将用户数限制为一年中的两位数(您可以添加2000位)?我不熟悉GWT。嗨,保罗,如果输入上述值,它需要…没有例外…如果我输入1583年之后的任何日期,它就会工作…如果我输入1583年之前的任何日期,它会给出一个例外…嗨,保罗,谢谢你的回复。请告诉我在这种情况下什么应该是更好的解决方案。感谢您将选择选项改为2012,而不是12,或者在两个日期变量中将2000添加到年份中。嗨,Paul,问题是datefield是可编辑的,因此用户可以编辑任何日期。我们唯一的验证是日期应为yyyy-mm-dd格式。首先要检查的是,如果您在2012-12-30和2012-12-31中输入,您不会看到异常。您是否可以添加验证规则,或者是否可以将用户数限制为一年中的两位数(您可以添加2000位)?我不熟悉GWT。嗨,保罗,如果输入上面的值,它需要..没有例外..如果我输入1583年之后的任何日期,它就会工作..如果我输入1583年之前的任何日期,它会给出一个例外。。。