简体   繁体   中英

Compare Calendar and java.util.date dates

Hi i am creating instance of Calendar Using:

Calendar calendarDate=Calendar.getInstance();
            calendarDate.set(2012, 6, 1,0,0,0);
                Date date1=calendar.getTime();

After that i create instance of java.util.date using:

Date date2=new Date(2012 - 1900,7-1, 01);

Now when i am trying to compare dates using following code:

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

it prints -1 and 1 instead of 0(zero).
Can any one help me to find what's goes wrong ?

Try to clear the value of calendar before set a new one. This will solve your problem.

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

Test for it:

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)));
    }

}

Date and Calender classes are different. Most of the methods of java.util.Date are deprecated. Hence its better to use Calender class. For more info on methods check out the below url. http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

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

compareTo

Returns: the value 0 if the argument is a Date equal to this Date; a value less than 0 if the argument is a Date after this Date; and a value greater than 0 if the argument is a Date before this Date.

Dates are GMT except when using the deprecated constructors. There will be a difference here because you also need to set the milli-seconds to 0 as well.

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));

prints

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

Note: Calendar will leave any field you don't set so the first set() will leave the milliseconds untouched.

where is date1 created? You seem to assume Calendar and Date are related. They are not.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM