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

Я пытаюсь сравнить две даты вместе, и я хочу сравнить только часть даты, а не часть времени, это то, как я храню дату в моей программе:

Thu Jan 27 23:20:00 GMT 2011

У меня есть:

ArrayList<Date> dateList;

и я хочу использовать

dateList.compares(newDate);
// if the answer was false which means I 
// have new date then add the newdate to my list

но так как часть времени также вовлечена, я не могу получить правильный ответ. Как я могу исправить мою проблему?

Я не хочу использовать JODA-TIME

Ответы [ 4 ]

3 голосов
/ 03 декабря 2011

Вы можете сравнить значение по значению, как это

d1.getDate().equals(d2.getDate()) &&
d1.getYear().equals(d2.getYear()) &&
d1.getMonth().equals(d2.getMonth())

Или

Date date1 = new Date(d1.getYear(), d1.getMonth(), d1.getDate());
Date date2 = new Date(d2.getYear(), d2.getMonth(), d2.getDate());
date1.compareTo(date2);

Если вы работаете с классом Date, рассмотрите возможность использования класса Calendar вместо Вот самое элегантное решение, использующее Календарь и Компаратор для этого

public class CalendarDateWithoutTimeComparator implements Comparator<Calendar> {

    public int compare(Calendar cal1, Calendar cal2) {
        if(cal1.get(Calendar.YEAR) != cal2.get(Calendar.YEAR)) {
            return cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
        } else if (cal1.get(Calendar.MONTH) != cal2.get(Calendar.MONTH)) {
            return cal1.get(Calendar.MONTH) - cal2.get(Calendar.MONTH);
        }
        return cal1.get(Calendar.DAY_OF_MONTH) - cal2.get(Calendar.DAY_OF_MONTH);
    }
}

Использование:

Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
// these calendars are equal

CalendarDateWithoutTimeComparator comparator = new CalendarDateWithoutTimeComparator();
System.out.println(comparator.compare(c1, c2));

List<Calendar> list = new ArrayList<Calendar>();
list.add(c1);
list.add(c2);

Collections.sort(list, comparator);
2 голосов
/ 03 декабря 2011

Почему вы не используете compareTo ()?

int java.util.Date#compareTo(Date anotherDate)
0 голосов
/ 03 декабря 2011

Вы можете использовать это

int compareDates(Calendar c1, Calendar c2) {
    if(c1.get(Calendar.YEAR) != c2.get(Calendar.YEAR)){
        return c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR);
    } else if(c1.get(Calendar.MONTH) != c2.get(Calendar.MONTH)){
        return c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
    }
    return (c1.get(Calendar.DAY_OF_MONTH) - c2.get(Calendar.DAY_OF_MONTH));
}

EDIT:

Время Joda или нет. В этом сообщении есть все ответы для сравнения дат

Как сравнить две даты без временной части?

0 голосов
/ 03 декабря 2011
Date check_in = new Date(2010,7,31);
Date check_out = new Date(2011,5,22);

int result = check_out.compareTo(check_in); 

if(result<0)
{
  // check_out < check_in
}
else if(result>0)
{
 // check_out > check_in
}
else
{
// check_out == check_in
}       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...