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.