比较日期没有时间

时间:2011-10-16 11:53:17

标签: java time

  

可能重复:
  How to compare two Dates without the time portion?

如何在java中没有时间比较日期?

Date currentDate = new Date();// get current date           
Date eventDate = tempAppointments.get(i).mStartDate;
int dateMargin = currentDate.compareTo(eventDate); 

此代码比较时间和日期!

4 个答案:

答案 0 :(得分:36)

尝试比较更改为00:00:00时间的日期(正如此函数所做的那样):

public static Date getZeroTimeDate(Date fecha) {
    Date res = fecha;
    Calendar calendar = Calendar.getInstance();

    calendar.setTime( fecha );
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    res = calendar.getTime();

    return res;
}

Date currentDate = new Date();// get current date           
Date eventDate = tempAppointments.get(i).mStartDate;
int dateMargin = getZeroTimeDate(currentDate).compareTo(getZeroTimeDate(eventDate));

答案 1 :(得分:3)

您可以编写方法Date withoutTime(Date),该方法返回所有时间字段(小时,分钟,秒,毫秒)设置为零的日期副本。然后你可以比较这些。

或者,如果可能,您可以切换到Joda Time。该库已经具有数据类型DateMidnight,这正是您要寻找的。

答案 2 :(得分:2)

编写自己的方法,不花时间考虑:

public static int compareDate(Date date1, Date date2) {
    if (date1.getYear() == date2.getYear() &&
        date1.getMonth() == date2.getMonth() &&
        date1.getDate() == date2.getDate()) {
      return 0 ;
    } 
    else if (date1.getYear() < date1.getYear() ||
             (date1.getYear() == date2.getYear() &&
              date1.getMonth() < date2.getMonth()) ||
             (date1.getYear() == date2.getYear() &&
              date1.getMonth() == date2.getMonth() &&
              date1.getDate() < date2.getDate()) {
      return -1 ;
   }
   else {
     return 1 ;
   }
}

请注意,方法getYear()getMonth()getDate()已被弃用。您应该通过Calendar类并执行相同的方法。

答案 3 :(得分:1)