Encontrando anos bissextos em Java

Encontrando anos bissextos em Java

1. Visão geral

Neste tutorial, demonstraremos várias maneiras de determinar se um determinado ano é aleap year em Java.

A leap year is a year that is divisible by 4 and 400 without a remainder. Assim, os anos que são divisíveis por 100, mas não por 400, não se qualificam, embora sejam divisíveis por 4.

2. Using the Pre-Java-8 Calendar API

Desde Java 1.1, a classeGregorianCalendar nos permite verificar se um ano é um ano bissexto:

public boolean isLeapYear(int year);

Como podemos esperar, este método retornatrue se o ano fornecido for um ano bissexto efalse para anos não bissextos.

Years in BC (Before Christ) need to be passed as negative values e são calculados como 1 -year. Por exemplo, o ano 3 aC é representado como -2, pois 1 - 3 = -2.

3. Using the Java 8+ Date/Time API

Java 8 introduziu o pacotejava.time com umDate and Time API muito melhor.

A classeYear no pacotejava.time tem um métodostatic para verificar se o ano dado é um ano bissexto:

public static boolean isLeap(long year);

E também possui um método de instância para fazer o mesmo:

public boolean isLeap();

4. Using the Joda-Time API

OJoda-Time API é uma das bibliotecas de terceiros mais usadas entre os projetos Java para utilitários de data e hora. Desde Java 8,this library is in maintainable state conforme mencionado emJoda-Time GitHub source repository.

Não existe um método API predefinido para encontrar um ano bissexto no Joda-Time. No entanto, podemos usar suas classesLocalDate eDays para verificar o ano bissexto:

LocalDate localDate = new LocalDate(2020, 1, 31);
int numberOfDays = Days.daysBetween(localDate, localDate.plusYears(1)).getDays();

boolean isLeapYear = (numberOfDays > 365) ? true : false;

5. Conclusão

Neste tutorial, vimos o que é um ano bissexto, a lógica para encontrá-lo e várias APIs Java que podemos usar para verificar isso.

Como sempre, trechos de código podem ser encontradosover on GitHub.