Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Finding day difference between two dates

Posted on 2006-11-07
12
645 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
Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

 

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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
servlet doXXX methods 3 61
Groovy problem when using SOAPUI : DispatchException occurred 7 58
How do I remove an object from a 3 40
jsp error 6 25
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.

809 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