Date.compareTo(Date)不起作用

时间:2014-11-12 09:30:23

标签: java android date compare

我正在编写一个应用场景,需要在两个日期之间匹配,如果有相同或不同,并且我试图使用Date.compareTo()实现。但它永远不会返回0,因为API表示同等日期。

我从Caledar.getTime()获取这些日期,但它永远不会

我用print检查了两个日期对象,甚至他们都返回了相同的字符串。

Sat Nov 15 14:17:41 GMT+05:30 2014, Sat Nov 15 14:17:41 GMT+05:30 2014

任何建议,如果日期对象相等,如何检查日期对象。

2 个答案:

答案 0 :(得分:5)

我想你忘了检查日期毫秒是否相同。

这是compareTo方法的源代码。

public int compareTo(Date anotherDate) {
    long thisTime = getMillisOf(this);
    long anotherTime = getMillisOf(anotherDate);
    return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));
}

正如您所看到的,此方法使用毫秒作为&#34;时间步骤&#34;来比较两个日期。


旧API代码:

此代码检查两天是否相同。 (没有小时,分钟,秒和毫秒)

Date date1; //Your initial date
Date date2; //Your initial second date

//Remove hours, minutes, seconds and milliseconds by creating new "clean" Date objects
Date compare1 = new Date(date1.getYear(), date1.getMonth(), date1.getDay());
Date compare2 = new Date(date2.getYear(), date2.getMonth(), date2.getDay());

if(compare1.compareTo(compare2) == 0){

}

但我建议您不要使用Date执行此任务。由于不推荐使用getYear,getMonth等方法,因此建议您查看较新的API,如GregorianCalendarCalendar


新API代码

此代码检查两天是否相同,包括小时和分钟。但没有秒和毫秒。

Date date1;
Date date2;

Calendar compareCalendar1 = Calendar.getInstance();
Calendar compareCalendar2 = Calendar.getInstance();
compareCalendar1.setTime(date1);
compareCalendar2.setTime(date2);


//Set for both calendars the seconds and milliseconds to 0
compareCalendar1.set(Calendar.MILLISECOND, 0);
compareCalendar1.set(Calendar.SECOND, 0);

compareCalendar2.set(Calendar.MILLISECOND, 0);
compareCalendar2.set(Calendar.SECOND, 0);

if(compareCalendar1.compareTo(compareCalendar2) == 0){

}

答案 1 :(得分:1)

尝试了解比较方案:

Date date1 = Calendar.getInstance().getTime();
Date date2 = Calendar.getInstance().getTime();

date1.compareTo(date2) >> -1

Date date3 = Calendar.getInstance().getTime();
Date date4 = date3;

date3.compareTo(date4) >> 0