Как сравнить только день в дате Java? - PullRequest
4 голосов
/ 19 июня 2011

Я пытаюсь сделать простое сравнение дат вчера и сегодня

if (yesterday.before(today)) {
 ...
}

Проблема в том, что при использовании метода before я получу значение true, даже если разница составит всего несколько секунд. Как мне сравнить только день (потому что я хочу оценить это значение как истинное, только если это был предыдущий день (минуты / секунды следует игнорировать)

Заранее спасибо

Ответы [ 4 ]

12 голосов
/ 19 июня 2011

с использованием DateUtils -

if (!DateUtils.isSameDay(yesterday, today) && (yesterday.before(today)) {
   //...
}

РЕДАКТИРОВАТЬ: это можно сделать и без DateUtils.См. эту тему.

5 голосов
/ 19 июня 2011

Если вы не хотите использовать стороннюю библиотеку, реализуйте такой метод:

public boolean before(Calendar yesterday, Calendar today) {
    if(yesterday == today) return false;
    if(yesterday == null || today == null) return false;
    return  yesterday.get(Calendar.YEAR) < today.get(Calendar.YEAR) ? true : 
        yesterday.get(Calendar.YEAR) == today.get(Calendar.YEAR) && yesterday.get(Calendar.DAY_OF_YEAR) < today.get(Calendar.DAY_OF_YEAR);
}
4 голосов
/ 19 июня 2011

Если вы хотите добавить библиотеку, которая обрабатывает даты лучше, чем стандартные библиотеки Java, вы можете посмотреть Joda .

Используя Joda, вы можете вычислить разницу между днями по:

  Days d = Days.daysBetween(startDate, endDate);
  int days = d.getDays();

, где startDate и endDate - версии дат в Joda, DateTime (на самом деле это суперкласс).

Преобразование объектов Java Date в объекты Joda DateTime может быть выполнено с помощью вызова конструктора:

DateTime dateTime = new DateTime(javaDate);

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

3 голосов
/ 19 июня 2011

Если вы хотите придерживаться Date, вы можете временно понизить текущую дату на один день. Если before() все еще приводит к тому же результату, у вас есть интервал времени по крайней мере один день.

final static long DAY_MILLIS = 86400000;

Date d1 = new Date(2011, 06, 18);
Date d2 = new Date(2011, 06, 16);

Date temp = new Date(d1.getTime() - DAY_MILLIS);

if (temp.before(d2)) 
  // Do stuff
}

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

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