@Override public double yearDiff(final LocalDate start, final LocalDate end, final PeriodCountBasis basis) { double diff = 0.0; switch (basis) { case ACT_ACT: final int startYear = start.getYear(); final int endYear = end.getYear(); if (startYear != endYear) { final LocalDate endOfStartYear = start.with(TemporalAdjusters.lastDayOfYear()); final LocalDate startOfEndYear = end.withDayOfYear(1); final long diff1 = ChronoUnit.DAYS.between(start, endOfStartYear); final long diff2 = ChronoUnit.DAYS.between(startOfEndYear, end); diff = (diff1 + 1.0) / start.lengthOfYear() + (endYear - startYear - 1.0) + (double) diff2 / (double) end.lengthOfYear(); } break; case CONV_30_360: case CONV_360E_ISDA: case CONV_360E_ISMA: case ACT_360: diff = dayDiff(start, end, basis) / YEAR_360_0; break; case ACT_365: diff = dayDiff(start, end, basis) / YEAR_365_0; break; default: throw new UnsupportedOperationException("Sorry ACT_UST is not supported"); } return diff; }