Solved

Finding day difference between two dates

Posted on 2006-11-07
12
642 Views
Last Modified: 2008-02-01
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()

0
Comment
Question by:halukakin79
  • 8
  • 3
12 Comments
 
LVL 16

Expert Comment

by:suprapto45
ID: 17895600
0
 
LVL 16

Accepted Solution

by:
suprapto45 earned 500 total points
ID: 17895612
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
 
LVL 16

Expert Comment

by:suprapto45
ID: 17895613
Try that,

I have not tested it :)
0
Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 

Author Comment

by:halukakin79
ID: 17895718
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
 
LVL 16

Expert Comment

by:suprapto45
ID: 17895849
can you post how do you construct your calendar?
0
 

Author Comment

by:halukakin79
ID: 17895868
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
 
LVL 16

Expert Comment

by:suprapto45
ID: 17895870
Give me a sec
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17895887
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
 
LVL 16

Expert Comment

by:suprapto45
ID: 17895891
Use

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

to have a look what I mean

David
0
 

Author Comment

by:halukakin79
ID: 17895936
Thanks a lot! :)
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17895942
You are welcome :)

Glad I could help

David
0
 

Expert Comment

by:mskumar_apk
ID: 17895945
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

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
maven project error 5 56
web services creation SOAP vs REST 5 42
Way to decrease size of apk file 9 71
java stored proc example 9 32
After being asked a question last year, I went into one of my moods where I did some research and code just for the fun and learning of it all.  Subsequently, from this journey, I put together this article on "Range Searching Using Visual Basic.NET …
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
This video teaches viewers about errors in exception handling.
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

831 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question