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șteisLeapYear()sauYear.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.