Проверка двух дат на андроид студии

Мне нужно проверить дату 2, одна выбирается пользователем, а другая - та, которую я получаю из календаря... это то, что я пытаюсь до сих пор безуспешно:

Calendar c = Calendar.getInstance();
if(!DateIsOlder(txtVwAppointmentDate.getText(), c.getTime())) {
            try {
                  //My code
                }  

public static boolean DateIsOlder(CharSequence date1, Date date2){
    //SimpleDateFormat Date2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz -HH:mm yyyy", Locale.ENGLISH);
    SimpleDateFormat dfDate = new SimpleDateFormat("dd/mm/yyyy", Locale.ENGLISH);
    boolean isOlder = false;
    try{
        //Date newDate = (Date)Date2.parse(date2);
        if(dfDate.parse(String.valueOf(date1)).before(dfDate.format(date2))){
        isOlder = true;
        }
        else if (dfDate.parse(String.valueOf(date1)).equals(dfDate.format(date2))){
        isOlder = false;
        }
        else {
            isOlder = false;
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return isOlder;
}

Ошибка на.before(dfDate.format(date2)), она говорит: Ошибка:(484, 51) error: метод перед в классе Date не может быть применен к данным типам; обязательно: дата найдена: причина строки: фактический аргумент Строка не может быть преобразована в дату путем преобразования вызова метода

и если вы можете видеть, с другой стороны, если я сравниваю обе даты, если они равны, и компилятор не показывает какую-либо ошибку в этой строке:

else if (dfDate.parse(String.valueOf(date1)).equals(dfDate.format(date2)))

Кроме того, я пытаюсь изменить его на дату, но безуспешно... Любая идея, чтобы помочь мне решить эту проблему? Благодарю.

4 ответа

Ваша проблема в том, что dfDate.format(date2) возвращает объект String, а не объект Date, поэтому вам нужно изменить метод yout на:

    public static boolean DateIsOlder(CharSequence date1, Date date2){
    SimpleDateFormat dfDate = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
    boolean isOlder = false;

    try{
        if(dfDate.parse(String.valueOf(date1)).before(dfDate.parse(dfDate.format(date2)))){
            isOlder = true;
        }
        else {
            isOlder = false;
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return isOlder;
}

Не используйте java.util.Date. Google говорит следующее о дате:

Устаревшая функциональность этого класса, связанная с отображением, теперь предоставляется DateFormat, а устаревшая вычислительная функциональность этого класса теперь предоставляется Calendar.

Другими словами, это устарело. Вы должны использовать DateFormat, о котором вы можете прочитать больше здесь: http://developer.android.com/reference/java/text/DateFormat.html

Для сравнения дат вам нужно создать два разных объекта Calendar и вызвать до () или после ()

Вы просто можете преобразовать дату пользователей в метку времени и сравнить их.

DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date); 
Timestamp timeStamp = new TimeStamp(date);

Что ж, спасибо всем, кто помогает мне найти решение, я пытаюсь найти простой способ, и он работает, мне не нужна вся информация calendar.getTime, поэтому я делаю следующее:

Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        if(!DateIsOlder(txtVwAppointmentDate.getText(), month + "/" + day + "/" + year)) {
            try { //my code }

public static boolean DateIsOlder(CharSequence date1, String date2){
    SimpleDateFormat dfDate = new SimpleDateFormat("MM/dd/yyyy");
    boolean isOlder = false;
    try{
        //Date newDate = (Date)Date2.parse(date2);
        if(dfDate.parse(String.valueOf(date1)).before(dfDate.parse(date2))){
            isOlder = true;
        }
        else {
            isOlder = false;
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return isOlder;
}

и работает без проблем! спасибо вам всем:)

Другие вопросы по тегам