1. Overview
In this tutorial, we’ll demonstrate several ways to determine if a given year is a leap year in Java.
A leap year is a year that is divisible by 4 and 400 without a remainder. Thus, years that are divisible by 100 but not by 400 don’t qualify, even though they’re divisible by 4.
2. Using the Pre-Java-8 Calendar API
Since Java 1.1, the GregorianCalendar class allows us to check if a year is a leap year:
public boolean isLeapYear(int year);
As we might expect, this method returns true if the given year is a leap year and false for non-leap years.
Years in BC (Before Christ) need to be passed as negative values and are calculated as 1 – year. For example, the year 3 BC is represented as -2, since 1 – 3 = -2.
3. Using the Java 8+ Date/Time API
Java 8 introduced the java.time package with a much better Date and Time API.
The class Year in the java.time package has a static method to check if the given year is a leap year:
public static boolean isLeap(long year);
And it also has an instance method to do the same:
public boolean isLeap();
4. Using the Joda-Time API
The Joda-Time API is one of the most used third-party libraries among the Java projects for date and time utilities. Since Java 8, this library is in maintainable state as mentioned in the Joda-Time GitHub source repository.
There is no pre-defined API method to find a leap year in Joda-Time. However, we can use their LocalDate and Days classes to check for leap year:
LocalDate localDate = new LocalDate(2020, 1, 31);
int numberOfDays = Days.daysBetween(localDate, localDate.plusYears(1)).getDays();
boolean isLeapYear = (numberOfDays > 365) ? true : false;
5. Conclusion
In this tutorial, we’ve seen what a leap year is, the logic for finding it, and several Java APIs we can use to check for it.
As always, code snippets can be found over on GitHub.