Trovare anni bisestili in Java

1. Panoramica

In questo tutorial, dimostreremo diversi modi per determinare se un determinato anno è un anno bisestile in Java.

Un anno bisestile è un anno divisibile per 4 e 400 senza resto . Pertanto, gli anni divisibili per 100 ma non per 400 non si qualificano, anche se sono divisibili per 4.

2. Utilizzo dell'API Calendar Pre-Java-8

A partire da Java 1.1, la classe GregorianCalendar ci consente di verificare se un anno è bisestile:

public boolean isLeapYear(int year);

Come ci si potrebbe aspettare, questo metodo restituisce true se l'anno specificato è un anno bisestile e false per anni non bisestili.

Gli anni in BC (Before Christ) devono essere passati come valori negativi e sono calcolati come 1 anno . Ad esempio, l'anno 3 a.C. è rappresentato come -2, poiché 1 - 3 = -2.

3. Utilizzo dell'API Data / Ora Java 8+

Java 8 ha introdotto java . pacchetto ora con un'API di data e ora molto migliore.

L' anno della classe in java . time package ha un metodo statico per verificare se l'anno specificato è un anno bisestile:

public static boolean isLeap(long year);

E ha anche un metodo di istanza per fare lo stesso:

public boolean isLeap();

4. Utilizzo dell'API Joda-Time

L'API Joda-Time è una delle librerie di terze parti più utilizzate tra i progetti Java per le utilità di data e ora. A partire da Java 8, questa libreria è in uno stato gestibile come menzionato nel repository dei sorgenti GitHub di Joda-Time.

Non esiste un metodo API predefinito per trovare un anno bisestile in Joda-Time. Tuttavia, possiamo usare le loro classi LocalDate e Days per verificare l'anno bisestile:

LocalDate localDate = new LocalDate(2020, 1, 31); int numberOfDays = Days.daysBetween(localDate, localDate.plusYears(1)).getDays(); boolean isLeapYear = (numberOfDays > 365) ? true : false;

5. conclusione

In questo tutorial, abbiamo visto cos'è un anno bisestile, la logica per trovarlo e diverse API Java che possiamo utilizzare per verificarlo.

Come sempre, gli snippet di codice possono essere trovati su GitHub.