shekhara
shekhara

Reputation: 1

how to find the total number of months between the two dates including extra days?

I have a requirement where I need to find out number of months between two dates including extra days.

example:

start date:01/01/2014

end date:21/02/2014

LocalDate startDate = new LocalDate(startDate1);

LocalDate endDate = new LocalDate(endDate1);

PeriodType monthDay =PeriodType.yearMonthDay().withYearsRemoved();

Period difference = new Period(startDate, endDate, monthDay);

int months = difference.getMonths();

int days = difference.getDays()

the out put I will get is:

months:1 days:20

but my requirement is I want get total months including that extra day.

like:1.66 months.

How to get this one in java?

Upvotes: 0

Views: 405

Answers (2)

cherouvim
cherouvim

Reputation: 31903

In order to be able to say 1.66 months you need to define how long a month is. It's not always the same. If you assume that a month is 30 days long then you can solve this by using:

Date startDate = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2014");
Date endDate = new SimpleDateFormat("dd/MM/yyyy").parse("21/02/2014");
double result = (endDate.getTime() - startDate.getTime()) / (1000D*60*60*24*30);

This gives us 1.7 and if you divide with 31 you get 1.6451612903225807.

If you want a better (but not perfect) approximation of how long a month is you can try 365/12 which will give you 1.6767123287671233 but still this is not perfect because leap years have 366 days.

The problem though is not with the formula, but with the problem definition. Nobody in real life says "I'll be there in exactly 1.66 months" and nobody will ever ask you to convert 1.66 months in days.

Upvotes: 1

etherous
etherous

Reputation: 709

This is my own answer, a variation on cherouvim's

final Date startDate = new GregorianCalendar (2014, 0, 1).getTime ();
final Date endDate = new GregorianCalendar (2014, 1, 21).getTime ();
System.out.println ((endDate.getTime () - startDate.getTime ()) / (float) (1000L * 60 * 60 * 24 * 30));

Upvotes: 0

Related Questions