@Override public double calculateYearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { int y1 = firstDate.getYear(); int y2 = secondDate.getYear(); double firstYearLength = firstDate.lengthOfYear(); if (y1 == y2) { double actualDays = doy(secondDate) - doy(firstDate); return actualDays / firstYearLength; } double firstRemainderOfYear = firstYearLength - doy(firstDate) + 1; double secondRemainderOfYear = doy(secondDate) - 1; double secondYearLength = secondDate.lengthOfYear(); return firstRemainderOfYear / firstYearLength + secondRemainderOfYear / secondYearLength + (y2 - y1 - 1); }
/** * Returns the number of days between two dates. * <p> * Faster than the JDK method. * * @param firstDate the first date * @param secondDate the second date, after the first * @return the new date */ static long daysBetween(LocalDate firstDate, LocalDate secondDate) { int firstYear = firstDate.getYear(); int secondYear = secondDate.getYear(); if (firstYear == secondYear) { return doy(secondDate) - doy(firstDate); } if ((firstYear + 1) == secondYear) { return (firstDate.lengthOfYear() - doy(firstDate)) + doy(secondDate); } return secondDate.toEpochDay() - firstDate.toEpochDay(); }
public void test_dayOfYear() { LocalDate date = LocalDate.of(2012, 1, 1); for (int i = 0; i < 366 * 4; i++) { assertEquals(LocalDateUtils.doy(date), date.getDayOfYear()); date = date.plusDays(1); } }