Difference in days between two dates in Java? Difference in days between two dates in Java? java java

Difference in days between two dates in Java?


I would suggest you use the excellent Joda Time library instead of the flawed java.util.Date and friends. You could simply write

import java.util.Date;import org.joda.time.DateTime;import org.joda.time.Days;Date past = new Date(110, 5, 20); // June 20th, 2010Date today = new Date(110, 6, 24); // July 24th int days = Days.daysBetween(new DateTime(past), new DateTime(today)).getDays(); // => 34


I might be too late to join the game but what the heck huh? :)

Do you think this is a threading issue? How are you using the output of this method for example? OR

Can we change your code to do something as simple as:

Calendar calendar1 = Calendar.getInstance();    Calendar calendar2 = Calendar.getInstance();    calendar1.set(<your earlier date>);    calendar2.set(<your current date>);    long milliseconds1 = calendar1.getTimeInMillis();    long milliseconds2 = calendar2.getTimeInMillis();    long diff = milliseconds2 - milliseconds1;    long diffSeconds = diff / 1000;    long diffMinutes = diff / (60 * 1000);    long diffHours = diff / (60 * 60 * 1000);    long diffDays = diff / (24 * 60 * 60 * 1000);    System.out.println("\nThe Date Different Example");    System.out.println("Time in milliseconds: " + diff + " milliseconds.");    System.out.println("Time in seconds: " + diffSeconds + " seconds.");    System.out.println("Time in minutes: " + diffMinutes + " minutes.");    System.out.println("Time in hours: " + diffHours + " hours.");    System.out.println("Time in days: " + diffDays + " days.");  }


The diff / (24 * etc) does not take Timezone into account, so if your default timezone has a DST in it, it can throw the calculation off.

This link has a nice little implementation.

Here is the source of the above link in case the link goes down:

/** Using Calendar - THE CORRECT WAY**/  public static long daysBetween(Calendar startDate, Calendar endDate) {    //assert: startDate must be before endDate    Calendar date = (Calendar) startDate.clone();    long daysBetween = 0;    while (date.before(endDate)) {      date.add(Calendar.DAY_OF_MONTH, 1);      daysBetween++;    }    return daysBetween;  }  

and

/** Using Calendar - THE CORRECT (& Faster) WAY**/  public static long daysBetween(final Calendar startDate, final Calendar endDate){  //assert: startDate must be before endDate    int MILLIS_IN_DAY = 1000 * 60 * 60 * 24;    long endInstant = endDate.getTimeInMillis();    int presumedDays =     (int) ((endInstant - startDate.getTimeInMillis()) / MILLIS_IN_DAY);    Calendar cursor = (Calendar) startDate.clone();    cursor.add(Calendar.DAY_OF_YEAR, presumedDays);    long instant = cursor.getTimeInMillis();    if (instant == endInstant)      return presumedDays;  final int step = instant < endInstant ? 1 : -1;    do {      cursor.add(Calendar.DAY_OF_MONTH, step);      presumedDays += step;    } while (cursor.getTimeInMillis() != endInstant);    return presumedDays;  }