Подтвердить что ты не робот

Получите разницу между двумя датами в месяцах с помощью Java

Мне нужно получить разницу между двумя датами с помощью Java. Мне нужно, чтобы мой результат был в течение нескольких месяцев.

Пример:

Startdate = 2013-04-03          enddate = 2013-05-03          Результат должен быть 1

если интервал

Startdate = 2013-04-03          enddate = 2014-04-03          Результат должен быть 12

Используя следующий код, я могу получить результаты за несколько дней. Как я могу попасть через несколько месяцев?

Date startDate = new Date(2013,2,2);
Date endDate = new Date(2013,3,2);
int difInDays = (int) ((endDate.getTime() - startDate.getTime())/(1000*60*60*24));
4b9b3361

Ответ 1

Если вы не можете использовать JodaTime, вы можете сделать следующее:

Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startDate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(endDate);

int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);

Обратите внимание, что если ваши даты - 2013-01-31 и 2013-02-01, вы получаете расстояние 1 месяц таким образом, что может быть или не быть тем, что вы хотите.

Ответ 2

Вы можете использовать библиотеку времени Joda для Java. Было бы намного проще рассчитать время-diff между датами с ним.

Пример фрагмента для time-diff:

Days d = Days.daysBetween(startDate, endDate);
int days = d.getDays();

Ответ 3

Вы можете попробовать следующее:

Calendar sDate = Calendar.getInstance();
Calendar eDate = Calendar.getInstance();
sDate.setTime(startDate.getTime());
eDate.setTime(endDate.getTime());
int difInMonths = sDate.get(Calendar.MONTH) - eDate.get(Calendar.MONTH);

Я думаю, это должно сработать. Я использовал что-то подобное для своего проекта, и он работал на то, что мне нужно (year diff). Вы получаете Calendar от Date и просто получаете разницу в месяц.