比较Calendar和java.util.date日期

时间:2012-07-18 13:02:27

标签: java date

您好我正在使用:

创建日历实例
Calendar calendarDate=Calendar.getInstance();
            calendarDate.set(2012, 6, 1,0,0,0);
                Date date1=calendar.getTime();

之后我使用:

创建java.util.date的实例
Date date2=new Date(2012 - 1900,7-1, 01);

现在,当我尝试使用以下代码比较日期时:

System.out.println(date2.compareTo(date1));
System.out.println(date1.compareTo(date2));

它打印-1和1而不是0(零) 任何人都可以帮我找到出错的地方吗?

5 个答案:

答案 0 :(得分:5)

尝试在设置新日历之前清除日历的值。这将解决您的问题。

Calendar calendarDate=Calendar.getInstance();
calendarDate.clear();
calendarDate.set(2012, 6, 1,0,0,0);

测试它:

import java.util.Calendar;
import java.util.Date;

import org.junit.Assert;

public class DateTest {

    @org.junit.Test
    public void test() {
        Calendar calendarDate=Calendar.getInstance();
        calendarDate.clear();
        calendarDate.set(2012, 6, 1,0,0,0);
        Assert.assertEquals(0, calendarDate.getTime().compareTo(new Date(2012 - 1900,7-1, 01)));
    }

}

答案 1 :(得分:2)

日期和日历类别不同。不推荐使用java.util.Date的大多数方法。因此,使用Calender类更好。有关方法的更多信息,请查看以下网址。 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

答案 2 :(得分:1)

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#compareTo(java.lang.Object

的compareTo

返回: 如果参数是等于此Date的Date,则值为0;如果参数是此日期之后的日期,则小于0的值;如果参数是此日期之前的日期,则值大于0。

答案 3 :(得分:0)

日期是GMT,除非使用弃用的构造函数。这里会有区别,因为你还需要将毫秒设置为0。

Calendar calendarDate=Calendar.getInstance(TimeZone.getTimeZone("GMT"));
calendarDate.set(2012, Calendar.JULY, 1,0,0,0);
calendarDate.set(Calendar.MILLISECOND, 0);
Date date1 = calendarDate.getTime();
Date date2=new Date(2012 - 1900,7-1, 1, 1, 0, 0);
System.out.println(date1);
System.out.println(date2);
System.out.println(date2.compareTo(date1));
System.out.println(date1.compareTo(date2));

打印

Sun Jul 01 01:00:00 BST 2012
Sun Jul 01 01:00:00 BST 2012
0
0

注意:日历将保留您未设置的任何字段,因此第一个set()将保持毫秒不变。

答案 4 :(得分:0)

在哪里创建了date1?您似乎假设日历和日期相关。他们不是。