Посчитать количество месяцев от одной даты dateFrom к другой выбранной дате dateTo

Всем привет! Я чет наглухо отрубился и не понимаю как посчитать количество месяцев между двумя датами...help!! <code>Код</code>]1

        int countMotnh = 0;
        Calendar startC = Calendar.getInstance();
        startC.setTime(dateFrom);
        Calendar endC = Calendar.getInstance();
        endC.setTime(dateTo);

Буду благодарен, если поможете, потому что я вообще не могу понять! Заранее спасибо!


Ответы (4 шт):

Автор решения: Сергей Бувака

Переведите обе даты в миллисекунды. Получите разницу и высчитайте потом из них количество месяцев.

Calendar.getInstance().get(Calendar.MILLISECOND);
→ Ссылка
Автор решения: Николай Гнап

Можно считать от сегодняшний даты в количестве дней

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            long timeUp = format.parse(DateActivation).getTime();
            long diff = System.currentTimeMillis() - timeUp;
            long diffDays = diff / (24 * 60 * 60 * 1000);

Или

LocalDate futureDate = LocalDate.now().plusMonths(12); 
→ Ссылка
Автор решения: Olmicron

Если я нигде не ошибся, то в countMonths будет точное кол-во месяцев (с учётом текущего месяца) между датами. Порядок дат не важен.

Calendar startC = Calendar.getInstance();
startC.setTime(dateFrom);
Calendar endC = Calendar.getInstance();
endC.setTime(dateTo);


int years = Math.abs(startC.get(Calendar.YEAR) - endC.get(Calendar.YEAR));
int countMonths;

if ( years > 0 ) {

    int months;

    if ( endC.getTimeInMillis() > startC.getTimeInMillis() )
        months = endC.get(Calendar.MONTH) + (12 - startC.get(Calendar.MONTH));
    else months = startC.get(Calendar.MONTH) + (12 - endC.get(Calendar.MONTH));

    countMonths = (years-1)*12 + months;

}
else if ( endC.getTimeInMillis() > startC.getTimeInMillis() )
    countMonths = endC.get(Calendar.MONTH) - startC.get(Calendar.MONTH);
else
    countMonths = startC.get(Calendar.MONTH) - endC.get(Calendar.MONTH);
→ Ссылка
Автор решения: Алексей г
System.out.println(ChronoUnit.MONTHS.between(LocalDate.parse("2020-01-31")
.withDayOfMonth(1), LocalDate.parse("2020-03-29").withDayOfMonth(1)));

В одну, но длинную строчку ))

→ Ссылка