Метод сравнения дат, похоже, не работает - вообще - PullRequest
4 голосов
/ 28 февраля 2011
public void display(Date date) {
        for (int i = 0; i < this.position; i++) {
            schedule[i].init();
            while (schedule[i].hasMoreOccurrences()) {
                Date tmp = schedule[i].nextOccurrence();
                if (tmp.compareTo(date) == 0) {
                    System.out.println(schedule[i].toString());
                    schedule[i].init();
                    break;
                }

            }
        }
    }

По сути, вышесказанное проходит через массив "событий".У каждого события есть метод для проверки, есть ли у него больше вхождений, и метод для получения следующего вхождения (тип даты).

Метод принимает дату, проходит через массив и проверяет каждое событие.Для каждого события он проверяет, есть ли у него больше вхождений.Если это так, он проверяет, является ли это вхождение "равным" указанной дате.Если это так, он печатает событие, выходит из цикла и переходит к следующему событию в массиве.Если следующее вхождение не совпадает с указанной датой, оно продолжает проверять, пока у события есть больше экземпляров для проверки.

Я знаю, что этот метод ПОДДЕРЖИВАЕТСЯ распечатывать события, однако я не получаю ошибоки нет выхода.Некоторое время я играл с ним безрезультатно.

Я на 100% уверен, что мои методы hasMoreOccurrence () и nextOccurrence () работают правильно, потому что другие части кода, которые сильно зависят от нихработает.

Я в тупике: / Спасибо за помощь:)

РЕДАКТИРОВАТЬ Я напечатал tmp и дату, и я вижу, что они оба происходят ната же дата, но не то же самое времяМне плевать на время, только на свидание.Есть идеи?

1 Ответ

5 голосов
/ 28 февраля 2011

Существует несколько способов сравнить два Date экземпляра без учета времени.

  1. Преобразовать оба в Календарь и сбросить поля интереса.

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    

    А затем сравните их.

    if (calendar1.equals(calendar2))
    

    (правда, это ужасно, именно поэтому JodaTime существует, а JSR-310 находится в стадии разработки)

  2. Форматировать в строку без времени, а затем анализировать обратно.

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    date = sdf.parse(sdf.format(date));
    

    И затем сравнивать их.

    if (date1.equals(date2))
    
  3. Использовать JodaTime изначало на.

    if (dateTime1.toLocalDate().equals(dateTime2.toLocalDate()))
    

Обратите внимание, что я использовал x.equals(y) вместо x.compareTo(y) == 0, потому что именно так вы должны сравнивать объекты на равенство в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...