Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日历问题:为什么这两个日期不相等?_Java - Fatal编程技术网

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

Java日历问题:为什么这两个日期不相等?,java,Java,当我多次运行上面的代码时,每次(对于打印日期的条件)都会打印“两者不相等”,但(对于日历的条件),有时会打印“Cal equal”,有时会打印“Cal not equal”。谁能解释一下为什么会这样 我尝试这个的主要原因是因为我想比较两个日期。创建对象时,两者的日期、月份和年份相同,但时间不同。我希望他们能被平等地比较。我该怎么做呢?改用它,它在处理日期和时间方面(比标准日期和日历)要好得多。你需要清除千秒。我相信日历也有毫秒精度。如果要继续代码,请添加 import java.io.*; p

当我多次运行上面的代码时,每次(对于打印日期的条件)都会打印“两者不相等”,但(对于日历的条件),有时会打印“Cal equal”,有时会打印“Cal not equal”。谁能解释一下为什么会这样


我尝试这个的主要原因是因为我想比较两个日期。创建对象时,两者的日期、月份和年份相同,但时间不同。我希望他们能被平等地比较。我该怎么做呢?

改用它,它在处理日期和时间方面(比标准日期和日历)要好得多。

你需要清除千秒。

我相信日历也有毫秒精度。如果要继续代码,请添加

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");
        }
    }
}
然后尝试比较。

截断毫秒字段 日历也有毫秒。添加以下内容:

c1.clear(Calendar.MILLISECOND);
c2.clear(Calendar.MILLISECOND);
但是使用从更容易实现该功能

这将删除所有小时、分钟、秒和毫秒。

之后

c1 = DateUtils.truncate(c1, Calendar.DATE);
c2 = DateUtils.truncate(c2, Calendar.DATE);

这比
c1.clear(日历毫秒)更容易输入


进行治疗。

在比较日期之前,使用以下方法重置时间

c1.clear();

这个答案出现在每个与日期相关的问题中。虽然可能是真的,但我仍然不知道它是如何回答OP的问题的。使用.clear方法将截断日历实例到时间的起点。。01/01/1970 .
Calendar c1=Calendar.getInstance();
c1.clear();
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;
    }