Calculer la différence de mois dans Joda Time

Lors de la 4e ligne de code (ignorer les espaces blancs & commentaires) et au-delà, je suis le calcul du mois de différence entre 2 dates. Cela fonctionne, mais ressemble un peu à hacky. Est-il un meilleur moyen?

int handleAllowance(LocalDate today) {

    int allowance = membership.allowance();
    if (allowance == 0) return 0;

    //if update was last month (or earlier)
    int months = today.monthOfYear().getMaximumValue() - today.monthOfYear().getMinimumValue(); //yeah, 12, but just to be 100% correct :-)
    int curMonth = (today.getYear()               * months) + today.              getMonthOfYear();
    int updMonth = (lastAllowanceUpdate.getYear() * months) + lastAllowanceUpdate.getMonthOfYear();
    if (curMonth > updMonth) {

        //...and if today is on or past update day
        int updateDay = Math.min(allowanceDay, today.dayOfMonth().getMaximumValue());
        if (today.getDayOfMonth() >= updateDay) {

            //number of months to give allowance (in the rare case this process fails to run for 2 months or more)
            int allowanceMonths = curMonth - updMonth;

            //give credits
            final int totalAllowance = allowance * allowanceMonths;
            giveCredits(totalAllowance);

            //update day
            lastAllowanceUpdate = lastAllowanceUpdate.plusMonths(allowanceMonths);

            //return the allowance given
            return totalAllowance;

        }

    }

    return 0;
}

source d'informationauteur Bart van Heukelom | 2011-07-27