Java日历问题:为什么这两个日期不相等?

Shw*_*nka 11 java

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我每次运行上述代码多次(如果条件为日期时打印)"两个不相等"打印但是(对于日历的条件)有时会打印"Cal Equal",有时"Cal Not Equal".有人可以解释一下为什么会这样吗?

我尝试这个的主要原因是因为我想比较两个日期.两者都具有相同的日,月和年,但是创建对象的时间不同.我希望它们相等(相同).我该怎么做?

Sea*_*oyd 23

截断毫秒字段

日历也有毫秒.添加这个:

c1.clear(Calendar.MILLISECOND);
c2.clear(Calendar.MILLISECOND);
Run Code Online (Sandbox Code Playgroud)

但它更容易实现使用功能DateUtils.truncate()Apache的共享/郎

c1 = DateUtils.truncate(c1, Calendar.DATE);
c2 = DateUtils.truncate(c2, Calendar.DATE);
Run Code Online (Sandbox Code Playgroud)

这将删除所有小时,分钟,秒和毫秒.