LocalDate.isLeapYear în Java

isLeapYear spune dacă anul datei este bisect; lengthOfMonth dă numărul de zile din luna datei (28-31).

Sintaxă
boolean isLeapYear()
int lengthOfMonth()
int lengthOfYear()

Ce face LocalDate.isLeapYear

isLeapYear() verifică regula calendarului gregorian: un an este bisect dacă se împarte la 4, cu excepția celor care se împart la 100 dar nu la 400. 2024 și 2000 sunt bisecți; 2026 și 1900 nu sunt.

lengthOfMonth() returnează câte zile are luna datei: 31 pentru octombrie, 28 sau 29 pentru februarie. lengthOfYear() dă 365 sau 366. Sunt utile când construiești un calendar sau împarți o sumă pe zile.

Pentru un an fără dată completă există java.time.Year.isLeap(2028) (metodă statică).

Ce returnează

isLeapYear: boolean. lengthOfMonth și lengthOfYear: int.

Exemple

Exemplul 1: Ani bisecți

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        for (int an : new int[] {1900, 2000, 2024, 2026, 2028}) {
            LocalDate d = LocalDate.of(an, 1, 1);
            System.out.println(an + ": bisect = " + d.isLeapYear() + ", zile = " + d.lengthOfYear());
        }
    }
}

Rezultat

1900: bisect = false, zile = 365
2000: bisect = true, zile = 366
2024: bisect = true, zile = 366
2026: bisect = false, zile = 365
2028: bisect = true, zile = 366

Exemplul 2: Câte zile are fiecare lună

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int luna = 1; luna <= 12; luna++) {
            sb.append(luna).append(':').append(LocalDate.of(2026, luna, 1).lengthOfMonth()).append(' ');
        }
        System.out.println(sb.toString().trim());
        System.out.println("Februarie 2028: " + LocalDate.of(2028, 2, 1).lengthOfMonth() + " zile");
    }
}

Rezultat

1:31 2:28 3:31 4:30 5:31 6:30 7:31 8:31 9:30 10:31 11:30 12:31
Februarie 2028: 29 zile

Exemplul 3: Chirie pe zile într-o lună incompletă

Chiria lunară de 2.100 lei se împarte la numărul de zile din lună, apoi se înmulțește cu zilele locuite.

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        LocalDate mutare = LocalDate.of(2026, 2, 10);
        int zileLuna = mutare.lengthOfMonth();
        int zileLocuite = zileLuna - mutare.getDayOfMonth() + 1;
        double dePlata = 2100.0 / zileLuna * zileLocuite;
        System.out.printf("Luna are %d zile, locuiești %d zile, plătești %.2f lei%n", zileLuna, zileLocuite, dePlata);
    }
}

Rezultat

Luna are 28 zile, locuiești 19 zile, plătești 1425.00 lei

Greșeli frecvente

  • Scrii regula de an bisect doar cu an % 4 == 0. Anul 1900 iese greșit bisect; folosește isLeapYear() sau Year.isLeap(an).
  • Presupui că februarie are mereu 28 de zile când construiești un calendar. Ia lungimea din lengthOfMonth().

Comenzi înrudite

  • LocalDate.withDayOfMonth: Returnează o copie a datei cu ziua din lună schimbată; anul și luna rămân aceleași.
  • LocalDate.plusMonths: Adaugă un număr de luni; dacă ziua nu există în luna rezultată, se folosește ultima zi a acelei luni.
  • Month: Enumerarea celor 12 luni (JANUARY = 1 … DECEMBER = 12), cu lungimea lunii și numele traduse.
  • LocalDate: Clasa pentru o dată calendaristică fără oră și fără fus orar: an, lună, zi. Obiectele ei nu se pot modifica.