Period.between în Java

Calculează perioada dintre două date în ani, luni și zile; getYears, getMonths, getDays citesc fiecare parte.

Sintaxă
static Period between(LocalDate start, LocalDate sfarsitExclusiv)
int getYears()
int getMonths()
int getDays()

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ă cu ChronoUnit.DAYS.between.
  • Calculezi vârsta cu ChronoUnit.DAYS.between(...) / 365. Anii bisecți dau erori în jurul zilei de naștere; folosește Period.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.