At the 4th line of code (ignore whitespace & comments) and beyond I\'m calculating the month difference between 2 dates. This works, but looks a bit hacky. Is there a be
This is the solution I came up with when commenting on Bozho
int handleAllowance(LocalDate today) {
int allowance = membership.allowance();
if (allowance == 0) return 0;
// calculate month difference
int allowanceMonths = Months.monthsBetween(lastAllowanceUpdate.withDayOfMonth(1), today.withDayOfMonth(1)).getMonths();
// if update was last month or earlier
if (allowanceMonths > 0) {
// ...and if today is on or past update day
int updateDay = Math.min(allowanceDay, today.dayOfMonth().getMaximumValue());
if (today.getDayOfMonth() >= updateDay) {
// give credits (multiply with months in the rare case this process consecutively fails to run for 2 months or more)
final int totalAllowance = allowance * allowanceMonths;
giveCredits(totalAllowance);
// update day
lastAllowanceUpdate = lastAllowanceUpdate.plusMonths(allowanceMonths);
// return the allowance given
return totalAllowance;
}
}
return 0;
}
Months.monthsBetween(
start.withDayOfMonth(1),
end.withDayOfMonth(1)).getMonths()
This is pretty similar to Bozho's solution:
public static YearMonth toYearMonth(LocalDate localDate) {
return new YearMonth(localDate.getYear(), localDate.getMonthOfYear());
}
public static int monthSwitches(LocalDate date1,LocalDate date2) {
return Months.monthsBetween(toYearMonth(date1),toYearMonth(date2)).getMonths();
}