2012-01-12 4 views
1

Я использую GXT/ExtGWT. У меня ниже кода, который сравнивает две даты.ClassCastException при сравнении дат?

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; 
} 

Здесь в datefields FromDate я выбрал в качестве 0012-12-30 и Todate как 0012-12-31.

Когда выполняется строка differenceBetweenDates.before(toDate), я становлюсь ниже исключения. Пожалуйста, помогите мне. Я здесь что-то не так?

java.lang.ClassCastException: sun.util.calendar.JulianCalendar$Date cannot be cast to sun.util.calendar.Gregorian$Date 
+0

Какой номер вы получаете исключение на линии? – Sap

+0

Привет Спасибо за ваш ответ. Ниже приведена строка, в которой я получаю исключение .if (differenceBetweenDates.before (toDate)). – user1016403

ответ

0

У вашей синтаксической разницы возникает некоторая проблема. Что-то думает, что вы намереваетесь представлять время в соответствии с юлианским календарем Цезаря! Если вы не православные, я сомневаюсь, что это намерение. endDateField имеет некоторую проблему внутри, которая манипулирует датами с совершенно неправильным календарем.

3

Согласно http://www.docjar.com/html/api/java/util/Date.java.html, 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.

+0

Привет, Пол, Спасибо за ваш ответ. Пожалуйста, сообщите мне, что должно быть лучшим решением в этом случае. Спасибо – user1016403

+1

Измените варианты выбора на 2012 вместо 12 или добавьте 2000 к году в двух переменных даты. –

+0

Hi Paul, проблема datefield доступна для редактирования, поэтому пользователь может редактировать любую дату. Единственная проверка, которую мы имеем, - дата должна быть в формате yyyy-mm-dd. – user1016403

1

У меня такая же проблема, но для другого варианта использования (Даты поступают от пользовательского ввода, но источником данных является таблица Excel).

очень простой обходной путь сделал трюк для меня:

private static boolean isBefore(Date firstDate, Date secondDate) { 
    return firstDate.getTime() < secondDate.getTime(); 
} 
Смежные вопросы