I want to get the difference between two Java Date objects. I\'ve used Joda-Time library. But the problem is that I\'m getting the Days greater difference than that of actua
The other answers correctly solved your specific problem.
LocalDateBut there is a larger solution. If you are starting with only dates, no time-of-day and no time zones, then you should be using the LocalDate class rather than DateTime.
Your code ignores the crucial issue of time zones. Time zones matter even for LocalDate, when trying to determine "today". Do you want today's date in Montréal or in Paris. A new day dawns in Paris earlier. When you omit time zone, you get the JVM’s current default time zone.
Furthermore, let Joda-Time do the parsing. No need to be using java.util.Date & .Calendar at all. Joda-time's formatting characters are almost the same as java.util.Date but not entirely so be sire to consult the doc. In this case it it identical.
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MM/dd/yyyy" );
LocalDate past = formatter.parseLocalDate( "06/22/2010" );
DateTimeZone = DateTimeZone.forID( "America/Montreal" ): // match time zone intended for that input string.
int days = Days.daysBetween( past, LocalDate.now( timeZone ) );
Month is MM
In your case:
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
It seems like mm refers to minutes, not months, which is MM. Please check here to see the list of appropriate lettering :)
mm => minutes, not months - you need MM for months - that'll resolve your Jan problem!
Your pattern is slightly defective. mm is parsed as minutes in hour, you're looking for MM which is month of year.