Ce face Period.between
Period.between(start, sfarsit) spune cât timp a trecut în ani, luni și zile, așa cum ar număra un om: de la 14 martie 2008 la 19 octombrie 2026 sunt 18 ani, 7 luni și 5 zile. Este calculul corect pentru vârstă și vechime.
getYears(), getMonths() și getDays() citesc fiecare parte separat; ele nu sunt totaluri. getMonths() este între 0 și 11, iar getDays() sub 31. Pentru numărul total de zile sau luni folosește ChronoUnit.DAYS.between sau toTotalMonths().
Parametri
| Parametru | Descriere |
|---|---|
start |
Data de început (inclusă). |
sfarsitExclusiv |
Data de sfârșit. Dacă este înainte de start, perioada este negativă. |
Ce returnează
Un Period; getterii returnează int.
Exemple
Exemplul 1: Vârsta exactă
import java.time.LocalDate;
import java.time.Period;
public class Main {
public static void main(String[] args) {
LocalDate azi = LocalDate.of(2026, 10, 19);
LocalDate nastere = LocalDate.of(2008, 3, 14);
Period p = Period.between(nastere, azi);
System.out.println("Perioada: " + p);
System.out.println("Ana are " + p.getYears() + " ani, " + p.getMonths() + " luni și " + p.getDays() + " zile");
System.out.println("Majoră? " + (p.getYears() >= 18));
}
}
Rezultat
Perioada: P18Y7M5D
Ana are 18 ani, 7 luni și 5 zile
Majoră? true
Exemplul 2: Vechimea în muncă
import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.ChronoUnit;
public class Main {
public static void main(String[] args) {
LocalDate angajare = LocalDate.of(2019, 7, 1);
LocalDate azi = LocalDate.of(2026, 10, 19);
Period vechime = Period.between(angajare, azi);
System.out.println("Vechime: " + vechime.getYears() + " ani și " + vechime.getMonths() + " luni");
System.out.println("getMonths(): " + vechime.getMonths() + ", total luni: " + vechime.toTotalMonths());
System.out.println("Total zile: " + ChronoUnit.DAYS.between(angajare, azi));
System.out.println("Zile de concediu în plus: " + vechime.getYears() / 5);
}
}
Rezultat
Vechime: 7 ani și 3 luni
getMonths(): 3, total luni: 87
Total zile: 2667
Zile de concediu în plus: 1
Greșeli frecvente
- Folosești
getDays()ca număr total de zile dintre date. Este doar restul de zile după ani și luni; totalul se calculează cuChronoUnit.DAYS.between. - Calculezi vârsta cu
ChronoUnit.DAYS.between(...) / 365. Anii bisecți dau erori în jurul zilei de naștere; foloseștePeriod.between(...).getYears().
Comenzi înrudite
Period: O perioadă de calendar în ani, luni și zile (P1Y2M3D); se adună la date ținând cont de lungimea lunilor.ChronoUnit: Enumerarea unităților de timp (DAYS, MONTHS, HOURS…); ChronoUnit.DAYS.between(a, b) numără zilele dintre două date.LocalDate.getYear: Citesc părțile unei date: anul (getYear), luna ca Month (getMonth) și ziua din lună (getDayOfMonth).Duration.between: Calculează timpul exact dintre două momente (ore, minute, secunde); negativ dacă sfârșitul e înaintea startului.