Как определить время, прошедшее между двумя объектами календаря в Java? - PullRequest
3 голосов
/ 12 февраля 2010

Как лучше всего посчитать количество времени между двумя календарными датами в java. Я пишу метод, который определяет количество месяцев, проходящих между двумя датами, и возвращает логическое значение на основе предварительно определенного срока месяцев. Это мой код (не работает правильно).

Этот код всегда возвращает false. Также этот код не учитывает количество прошедших дней. Это может быть проблемой, если дата начала в конце месяца. Разве нет простого метода сравнения?

private boolean hasMatured()
{
    Calendar now = Calendar.getInstance();

    Calendar start = (Calendar) super.dateOpened.clone();

    int nowYear = now.get(Calendar.YEAR);
    int nowMonth = now.get(Calendar.MONTH);

    int startYear = start.get(Calendar.YEAR);
    int startMonth = start.get(Calendar.MONTH);

    int monthsElapsed = (nowYear - startYear) * 12 + (nowMonth - startMonth);

    return monthsElapsed>PERIOD_IN_MONTHS;
}

Ответы [ 4 ]

2 голосов
/ 12 февраля 2010
int nowYear = now.get(Calendar.YEAR);
int nowMonth = now.get(Calendar.MONTH);

int startYear = now.get(Calendar.YEAR);
int startMonth = now.get(Calendar.MONTH);

int monthsElapsed = (nowYear - startYear) * 12 + (nowMonth - startMonth);
1 голос
/ 12 февраля 2010

Я бы настоятельно рекомендовал Joda Time для всего, что связано с датами в Java. У него гораздо более понятный и интуитивно понятный API, а также концепции интервалов между датами и т. Д.

0 голосов
/ 12 февраля 2010

Я что-то упустил?В Calendar есть сравнение (), а также другие полезные вещи ...

Как насчет:

Calendar now = Calendar.getInstance();

now.add(Calendar.MONTH, -PERIOD_IN_MONTHS);

return super.dateOpened.before(now);

Вычтите X месяцев с сегодняшнего дня и посмотрите, не наступила ли еще дата начала до этой даты.Если это так, то, должно быть, прошло X месяцев.

0 голосов
/ 12 февраля 2010

Код выглядит хорошо, ожидаем от одного крупного предупреждения: Calendar is mutable .

Итак, вместо

Calendar start = super.dateOpened;

ты должен был сделать

Calendar start = (Calendar) super.dateOpened.clone();

в противном случае изменения отражаются в dataOpened, что может вызвать неожиданные побочные эффекты.

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