import java.io.*;
public class testing {
public static void main(String a[]) throws Exception{
Date d1=new Date();
Thread.sleep(2000);
Date d2=new Date();
if(d1.equals(d2)){
System.out.println("Both equal");
}else{
System.out.println("Both not equal");
}
Calendar c1=Calendar.getInstance();
Calendar c2=Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
c1.clear(Calendar.HOUR);
c1.clear(Calendar.MINUTE);
c1.clear(Calendar.SECOND);
c2.clear(Calendar.HOUR);
c2.clear(Calendar.MINUTE);
c2.clear(Calendar.SECOND);
if(c2.compareTo(c1) == 0){
System.out.println("Cal Equal");
}else {
System.out.println("Cal Not Equal");
}
}
}
当我每次多次运行上述代码时(如果条件为日期打印)“两个不相等”打印但是(对于日历的条件)有时打印“Cal Equal”,有时“Cal Not”等于'。有人可以解释一下为什么会这样吗?
我尝试这个的主要原因是因为我想比较两个日期。两者都具有相同的日,月和年,但是创建对象的时间不同。我希望它们相等(相同)。我该怎么做?
答案 0 :(得分:21)
日历也有毫秒。加上这个:
c1.clear(Calendar.MILLISECOND);
c2.clear(Calendar.MILLISECOND);
中的Apache Commons / Lang更容易实现该功能
c1 = DateUtils.truncate(c1, Calendar.DATE);
c2 = DateUtils.truncate(c2, Calendar.DATE);
这将删除所有小时,分钟,秒和毫秒。
答案 1 :(得分:3)
我相信日历也具有毫秒精度。如果您想继续使用代码,请添加
c1.clear(Calendar.MILLISECOND);
c2.clear(Calendar.MILLISECOND);
然后尝试比较。
答案 2 :(得分:2)
使用JodaTime代替它,它比标准日期和日历更好(操作日期和时间)。
答案 3 :(得分:1)
您需要清除毫秒
答案 4 :(得分:1)
之后
Calendar c1=Calendar.getInstance();
添加
c1.clear();
输入比c1.clear(Calendar.MILLISECOND);
努力享受。
答案 5 :(得分:0)
使用以下方法删除时间以比较日期
private Calendar resetHours(Calendar cal) {
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MILLISECOND,0);
return cal;
}