We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Finding day difference between two dates

on
Medium Priority
686 Views
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);
} while (d1.get(java.util.Calendar.YEAR) != y2);
}
return days;
} // getDaysBetween()

Comment
Watch Question

View Solution Only

Commented:
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()

Not the solution you were looking for? Getting a personalized solution is easy.

Commented:
Try that,

I have not tested it :)

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.

Commented:
can you post how do you construct your calendar?

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

Commented:
Give me a sec

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

Commented:
Use

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

to have a look what I mean

David

Commented:
Thanks a lot! :)

Commented:
You are welcome :)

David

Commented:
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
Thanks for using Experts Exchange.

• View three pieces of content (articles, solutions, posts, and videos)
• Ask the experts questions (counted toward content limit)
• Customize your dashboard and profile