I have this code for calculating the number of days passed from a given year:
for (int currentYear = localDate.getYear() - 1; currentYear >= STARTING_YEAR; currentYear--){
LocalDate date = LocalDate.of(currentYear,5,5); //an arbitrary day of year
jdn += date.lengthOfYear();
}
jdn += localDate.getDayOfYear();
This code is working as expected.
I am not comfortable with choosing an arbitrary day to only get the length of the year. Is there any better approach?
1 Answer 1
Your code scales poorly if there are many years between STARTING_YEAR
and localDate
.
Worse, if localDate
occurs before the STARTING_YEAR
, then your code behaves as if STARTING_YEAR
is the same year as localDate
, which is weird behavior.
To calculate the number of days between two dates, use DAYS.between()
.
import java.time.LocalDate;
import static java.time.temporal.ChronoUnit.DAYS;
...
long jdn = 1 + DAYS.between(LocalDate.ofYearDay(STARTING_YEAR, 1), localDate);
The 1 +
is necessary because the convention when subtracting dates is inclusive-exclusive, whereas your code uses an inclusive-inclusive range.