@Override public T addTo( T context, long amount ) { PlainDate date = context.get(PlainDate.CALENDAR_DATE); date = PlainDate.doAdd(this.unit, date, amount, this.policy); return context.with(PlainDate.CALENDAR_DATE, date); }
return PlainDate.doAdd(unit, this, amount, OverflowUnit.POLICY_PREVIOUS_VALID_DATE); } catch (IllegalArgumentException iae) { ArithmeticException ex = new ArithmeticException("Result beyond boundaries of time axis.");
return doAdd( CalendarUnit.MONTHS, context, policy); case CENTURIES: return doAdd( CalendarUnit.MONTHS, context, policy); case DECADES: return doAdd( CalendarUnit.MONTHS, context, policy); case YEARS: return doAdd( CalendarUnit.MONTHS, context, policy); case QUARTERS: return doAdd( CalendarUnit.MONTHS, context, policy);
private long monthDelta( PlainDate start, PlainDate end ) { long amount = (end.getEpochMonths() - start.getEpochMonths()); if ( (this.policy == POLICY_KEEPING_LAST_DATE) || (this.policy == POLICY_END_OF_MONTH) || (this.policy == POLICY_JODA_METRIC) ) { CalendarUnit u = CalendarUnit.MONTHS; if ((amount > 0) && PlainDate.doAdd(u, start, amount, this.policy).isAfter(end)) { amount--; } else if ((amount < 0) && PlainDate.doAdd(u, start, amount, this.policy).isBefore(end)) { amount++; } } else { if ((amount > 0) && (end.getDayOfMonth() < start.getDayOfMonth())) { amount--; } else if ((amount < 0) && (end.getDayOfMonth() > start.getDayOfMonth())) { amount++; } } return amount; }