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.