Посчитать количество месяцев от одной даты dateFrom к другой выбранной дате dateTo
Всем привет!
Я чет наглухо отрубился и не понимаю как посчитать количество месяцев между двумя датами...help!!
]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)));
В одну, но длинную строчку ))