我有两个日期,我想比较它们。我已经记录了实际日期以确保其正确无误。
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。
答案 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。
答案 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);
}