Date compareTo()方法总是返回-1

时间:2011-08-16 20:06:22

标签: java android

我有两个日期,我想比较它们。我已经记录了实际日期以确保其正确无误。

Date photoDate = new Date(mPhotoObject.calendar.getTimeInMillis());

SimpleDateFormat dateFormat = new SimpleDateFormat("M.d.yy");


Log.v("photo date is", dateFormat.format(photoDate));
Date currentDate = new Date(Calendar.getInstance().getTimeInMillis());
Log.v("current date is", dateFormat.format(currentDate));
Log.v("date comparison", photoDate.compareTo(currentDate)+"");

if(photoDate.compareTo(currentDate)<0) {
     view.showFooButton(false);
  } else {
     view.showFooButton(true);
  }

由于某种原因,即使此日期在Date参数之前不是,compareTo方法也始终返回-1。

3 个答案:

答案 0 :(得分:2)

Date包括时间到毫秒。您需要使用不同的比较器或修剪时间信息:

final long millisPerDay= 24 * 60 * 60 * 1000;
...
Date photoDate = new Date((long)Math.floor(mPhotoObject.calendar.getTimeInMillis() / millisPerDay) * millisPerDay);
...
Date currentDate = new Date((long)Math.floor(Calendar.getInstance().getTimeInMillis() / millisPerDay) * millisPerDay);

答案 1 :(得分:1)

这是预期的行为,如果参数在日期之后,则返回-1。

Date compareTo

答案 2 :(得分:0)

另一个解决方案是,由于您只想比较日,月和年,您应该创建另一个日期的克隆,并根据您的需要设置日,月,年

Date date=new Date(otherDate.getTime());
date.setDate(...);
date.setMonth(...);
date.setYear(...);

然后使用比较。

仅使用日,月,年来比较2个日期的示例函数是:

public static int compareDatesOnly(final Date date1, final Date date2) {
    final Date dateToCompare = new Date(date1.getTime());
    dateToCompare.setDate(date2.getDate());
    dateToCompare.setMonth(date2.getMonth());
    dateToCompare.setYear(date2.getYear());
    return date1.compareTo(dateToCompare);
}