Java Top

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:


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.

Java bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

Generic footer banner
Comments are closed on this article!