Finding day difference between two dates

Hello,
I've been trying to figure how to correctly find the day difference between two days.
Below you will see a code I'm using to compare days. But I believe it's not functioning correctly. I'm testing it on these two dates:
2005-08-10 and 2005-02-10

The code below says the difference is 184 days.
However when I use excel's day difference function (namely days360) excel says the difference is 180 days.

I would like to learn how to find the difference correctly.
Thanks!





xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
public static int getDaysBetween (java.util.Calendar d1, java.util.Calendar d2) {
    if (d1.after(d2)) {  // swap dates so that d1 is start and d2 is end
        java.util.Calendar swap = d1;
        d1 = d2;
        d2 = swap;
    }
    int days = d2.get(java.util.Calendar.DAY_OF_YEAR) -
               d1.get(java.util.Calendar.DAY_OF_YEAR);
    int y2 = d2.get(java.util.Calendar.YEAR);
    if (d1.get(java.util.Calendar.YEAR) != y2) {
        d1 = (java.util.Calendar) d1.clone();
        do {
            days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR);
            d1.add(java.util.Calendar.YEAR, 1);
        } while (d1.get(java.util.Calendar.YEAR) != y2);
    }
    return days;
} // getDaysBetween()

halukakin79Asked:
Who is Participating?
 
suprapto45Connect With a Mentor Commented:
public static int getDaysBetween (java.util.Calendar d1, java.util.Calendar d2) {
    if (d1.after(d2)) {  // swap dates so that d1 is start and d2 is end
        java.util.Calendar swap = d1;
        d1 = d2;
        d2 = swap;
    }
   
    long diffMillis = d2.getTimeInMillis()-d1.getTimeInMillis();
    long diffDays = diffMillis/(24*60*60*1000);

    return new Long(diffDays).intValue();
} // getDaysBetween()
0
 
suprapto45Commented:
Try that,

I have not tested it :)
0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
halukakin79Author Commented:
No that doesn't do it.

I'm testing it between 2005-02-10 and 2005-03-10.
Your code says there are 30 days in between.

However when I count the days from the calendar there are 28 days in between.
0
 
suprapto45Commented:
can you post how do you construct your calendar?
0
 
halukakin79Author Commented:
Sure thing. Here it is:

    Calendar c1 = Calendar.getInstance();
    c1.set(2005, 3 , 10);
    Calendar c2 = Calendar.getInstance();
    c2.set(2005, 2 , 10);
    getDaysBetween(c1,c2);
0
 
suprapto45Commented:
Give me a sec
0
 
suprapto45Commented:
Do you know that the month is actually starting from zero?

So FEBRUARY is 1 instead of 2

    Calendar c1 = Calendar.getInstance();
    c1.set(2005, Calendar.MARCH , 10);
    Calendar c2 = Calendar.getInstance();
    c2.set(2005, Calendar.FEBRUARY , 10);

is equal to

    Calendar c1 = Calendar.getInstance();
    c1.set(2005, 2 , 10);
    Calendar c2 = Calendar.getInstance();
    c2.set(2005, 1 , 10);
    getDaysBetween(c1,c2);
0
 
suprapto45Commented:
Use

System.out.println(c1.getTime().toString());
System.out.println(c2.getTime().toString());

to have a look what I mean

David
0
 
halukakin79Author Commented:
Thanks a lot! :)
0
 
suprapto45Commented:
You are welcome :)

Glad I could help

David
0
 
mskumar_apkCommented:
long start = cal1.getTime().getTime();
long end - cal2.getTime().getTime();

long diff = (end - start)/86400;

This should work irrespective of the timezones.

Kumar
www.fwanalyzer.com
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.