Проблема сравнения дат (времени) в Android - PullRequest
2 голосов
/ 07 июля 2011

У меня проблема, когда я пытаюсь сравнить две даты в Android. Я не уверен, если это проблема с эмулятором или у меня есть проблема в самом коде. Дело в том, что код работает в обычной программной среде Java, что смущает меня еще больше.

У меня есть следующий код для сравнения дат в Android 2.1:

public boolean compareDates(String givenDateString) {
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    boolean True;
    try {
        True = false;
        Date givenDate = sdf.parse(givenDateString);
        Date currentDate = new Date();

        if(givenDate.after(currentDate)){
            True = true;
        } if(givenDate.before(currentDate)){
            True = false;
        } if(givenDate.equals(currentDate)){
            True = false;
        }   
    } catch (Exception e) {
        Log.e("ERROR! - comparing DATES", e.toString());
    }
    return True;
}

теперь код хорошо работает в Java, но в Android он продолжает возвращать мне false. Единственное изменение происходит, когда я вставляю переменную currentDate со строкой, подобной этой:

Date currentDate = sdf.parse("16:50");

Когда переменная currentDate установлена ​​в строку, она возвращает true, когда я сравниваю ее со значением, которое происходит после указанного времени. Я также попытался установить переменную currentDate с помощью:

  Calendar calendar = Calendar.getInstance();
  Date currentDate = calendar.getTime();

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

--- РЕДАКТИРОВАТЬ ---

Нашел решение для моей проблемы. Я использовал календарь и прочитал часы и минуты оттуда, затем поместил их в строку для анализа, и это сработало. Код теперь выглядит так:

public boolean compareDates(String givenDateString) {
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    boolean True = false;
    try {
        Date givenDate = sdf.parse(givenDateString);
        Calendar now = Calendar.getInstance();
            int hour = now.get(Calendar.HOUR_OF_DAY);
            int minute = now.get(Calendar.MINUTE);
        Date currentDate = sdf.parse(hour + ":" + minute);

        if(givenDate.after(currentDate)){
            True = true;
        } if(givenDate.before(currentDate)){
            True = false;
        } if(givenDate.equals(currentDate)){
            True = false;
        }   
    } catch (Exception e) {
        Log.e("ERROR! - comparing DATES", e.toString());
    }
    return True;
}

1 Ответ

0 голосов
/ 07 июля 2011

Когда я делаю сравнения по датам, я обязательно использую объекты календаря.Затем я использую функцию compareTo ():

if ( myCalendar.compareTo(upperLimitCalendar) >= 0 )

См. Документацию здесь:

http://developer.android.com/reference/java/util/Calendar.html

...