Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 236
  • Last Modified:

Date time difference in months

If i have two dates as Calendar instances:  2006-23-02 00:00:00 and 2002-12-09 00:00:00 then i need the number of months between the two dates. how can i do this?

Note: the dates never have times.

// currently this is what i have but it's not completely accurate because i assume that each month is 30 days
private int getNumMonths(Calendar mostrecent, Calendar old, boolean cleartime) {
        if(cleartime) {
            mostrecent.set(Calendar.MILLISECOND, 0);
            mostrecent.set(Calendar.SECOND, 0);
            mostrecent.set(Calendar.MINUTE, 0);
            mostrecent.set(Calendar.HOUR_OF_DAY, 0);

            old.set(Calendar.MILLISECOND, 0);
            old.set(Calendar.SECOND, 0);
            old.set(Calendar.MINUTE, 0);
            old.set(Calendar.HOUR_OF_DAY, 0);
        }
       
        // difference between the 2 dates in millis
        long difference = mostrecent.getTimeInMillis() - old.getTimeInMillis();

        // set the calendar object representing the difference
        Calendar diff = Calendar.getInstance();
        diff.setTimeInMillis(difference);

        long diffMonths = (difference/(24*60*60*1000))/30;
        return(StringTools.strToInt("" + diffMonths));
}
0
tbboyett
Asked:
tbboyett
  • 2
  • 2
2 Solutions
 
sciuriwareCommented:
>>>    long difference = mostrecent.getTimeInMillis() - old.getTimeInMillis();
That's already nearly the answer,

       return(difference/(24*60*60*1000*30);// returns a long, rounded down.
or:

       return(difference/(24.0*60*60*1000*30);// returns a double with a fraction.

Don't forget to type your method long or double.
;JOOP!
0
 
tbboyettAuthor Commented:
thanks for the response.

>> return(difference/(24*60*60*1000*30);
this returns a (negative) number that is way off from the number of months between the two dates
0
 
shinobunCommented:
Take the difference of (year * 12 + month).
0
 
sciuriwareCommented:
Of course negative if you don't control the sequence of the dates.
Then use:

       return(Math.abs(difference/(24*60*60*1000*30));// returns a long, rounded down.
or:

       return(Math.abs(difference/(24.0*60*60*1000*30));// returns a double with a fraction.

;JOOP!
0
 
tbboyettAuthor Commented:
Thanks guys for your help, but i've found a solution that works for what i need.

here it is incase anyone needs it:

private int getNumMonthBetweenTwoDates(Calendar mostrecent, Calendar old, boolean cleartime) {    
        boolean done = false;
        int numMonths = 0;
       
        if(cleartime) {
            mostrecent.set(Calendar.MILLISECOND, 0);
            mostrecent.set(Calendar.SECOND, 0);
            mostrecent.set(Calendar.MINUTE, 0);
            mostrecent.set(Calendar.HOUR_OF_DAY, 0);

            old.set(Calendar.MILLISECOND, 0);
            old.set(Calendar.SECOND, 0);
            old.set(Calendar.MINUTE, 0);
            old.set(Calendar.HOUR_OF_DAY, 0);
        }
       
        while(!done) {
            mostrecent.add(Calendar.MONTH, -1);
            if((mostrecent.get(Calendar.MONTH) == old.get(Calendar.MONTH)) &&
               (mostrecent.get(Calendar.YEAR) == old.get(Calendar.YEAR))) {
               // found the old date month
               
               numMonths ++; // add an extra month to round up
               done = true;
            }
            numMonths ++;
        }
       
        return (numMonths);
}
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now