【问题标题】:Date.compareTo(Date) not workingDate.compareTo(Date) 不起作用
【发布时间】:2014-11-12 09:30:22
【问题描述】:

我正在编写一个应用场景,如果两个日期是否相同,则需要在其中匹配,并且我正在尝试使用Date.compareTo() 来实现。但它永远不会像 API 所说的相同日期返回 0。

我从Caledar.getTime() 得到这些日期,但从来没有

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

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

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

【问题讨论】:

  • 你检查毫秒是否相同?
  • 将日期秒和毫秒都设置为零..
  • 使用 date.getTime() 打印两个日期并查看差异。
  • 这些打印不包含毫秒,因此它们仍然可能不同。

标签: java android date compare


【解决方案1】:

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

这是 compareTo 方法的源代码。

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

如您所见,此方法使用毫秒作为“时间步长”比较两个日期。


旧 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){

}

【讨论】:

  • 是的,Rofl 我尝试了同样的方法并且它正在工作..但是由于它是创建日期构造函数已被弃用..所以应该有其他方法来获得它。
  • 我在 if 语句中犯了一个小错误。它现在可以工作了,在真实设备上进行了测试。
  • 如果您只想比较天数,请尝试将分钟和小时也设置为 0。
【解决方案2】:

尝试理解比较场景:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 2019-06-13
    • 2018-07-03
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多