Search code examples
javacalendarleap-year

Java calculate days in year, or between two dates


Is there a method in any native Java class to calculate how many days were/will be in a specific year? As in, was it a Leap year (366 days) or a normal year (365 days)?

Or do I need to write it myself?

I'm calculating the number of days between two dates, for example, how many days left until my birthday. I want to take into account the February 29 of Leap year. I have it all done except that 29th.


Solution

  • since JAVA 8

    Days in a year:

    LocalDate d = LocalDate.parse("2020-12-31");                   // import java.time.LocalDate;
    return d.lengthOfYear();                                       // 366
    

    Days to my birthday:

    LocalDate birth = LocalDate.parse("2000-02-29");
    LocalDate today = LocalDate.now();                             // or pass a timezone as the parameter
    
    LocalDate thisYearBirthday = birth.withYear(today.getYear());  // it gives Feb 28 if the birth was on Feb 29, but the year is not leap.
    LocalDate nextBirthday = today.isAfter(thisYearBirthday)
        ? birth.withYear(today.getYear() + 1)
        : thisYearBirthday;
    
    return DAYS.between(today, nextBirthday);                      // import static java.time.temporal.ChronoUnit.DAYS;