LocalDate.plusMonths în Java

Adaugă un număr de luni; dacă ziua nu există în luna rezultată, se folosește ultima zi a acelei luni.

Sintaxă
LocalDate plusMonths(long luni)

Ce face LocalDate.plusMonths

plusMonths(n) mută data cu n luni, păstrând ziua din lună. 15 martie plus o lună este 15 aprilie.

Când ziua nu există în luna nouă, rezultatul este ultima zi validă: 31 ianuarie plus o lună devine 28 februarie (sau 29 în an bisect). Metoda nu aruncă excepție în acest caz. Atenție: după o asemenea ajustare, ziua „pierdută” nu revine la lunile următoare.

Pentru scădere există minusMonths, iar pentru ani plusYears/minusYears (29 februarie plus un an devine 28 februarie).

Parametri

Parametru Descriere
luni Numărul de luni de adunat. Poate fi negativ.

Ce returnează

Un LocalDate nou.

Exemple

Exemplul 1: Sfârșitul lunii se ajustează

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        System.out.println(LocalDate.of(2026, 3, 15).plusMonths(1));
        System.out.println(LocalDate.of(2026, 1, 31).plusMonths(1));   // 2026 nu e bisect
        System.out.println(LocalDate.of(2028, 1, 31).plusMonths(1));   // 2028 e bisect
        System.out.println(LocalDate.of(2026, 10, 19).plusMonths(-2));
    }
}

Rezultat

2026-04-15
2026-02-28
2028-02-29
2026-08-19

Exemplul 2: Rate lunare de la aceeași dată de început

Calculăm fiecare rată pornind de la prima dată (start.plusMonths(i)), nu de la rata anterioară. Așa, după februarie, ziua revine la 31 acolo unde există.

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        LocalDate start = LocalDate.of(2026, 1, 31);
        LocalDate dinAproapeInAproape = start;
        for (int i = 0; i < 4; i++) {
            System.out.println("Rata " + (i + 1) + ": " + start.plusMonths(i)
                    + "   (pas cu pas: " + dinAproapeInAproape + ")");
            dinAproapeInAproape = dinAproapeInAproape.plusMonths(1);
        }
    }
}

Rezultat

Rata 1: 2026-01-31   (pas cu pas: 2026-01-31)
Rata 2: 2026-02-28   (pas cu pas: 2026-02-28)
Rata 3: 2026-03-31   (pas cu pas: 2026-03-28)
Rata 4: 2026-04-30   (pas cu pas: 2026-04-28)

Greșeli frecvente

  • Calculezi date recurente adunând câte o lună la data anterioară. După 28 februarie toate datele rămân pe 28. Pornește mereu de la data inițială: start.plusMonths(i).
  • Folosești plusDays(30) în loc de plusMonths(1). Rezultatul diferă în lunile cu 28, 29 sau 31 de zile.

Comenzi înrudite

  • LocalDate.plusDays: Returnează o dată nouă mutată cu un număr de zile înainte (plusDays) sau înapoi (minusDays).
  • LocalDate.withDayOfMonth: Returnează o copie a datei cu ziua din lună schimbată; anul și luna rămân aceleași.
  • LocalDate.isLeapYear: isLeapYear spune dacă anul datei este bisect; lengthOfMonth dă numărul de zile din luna datei (28-31).
  • Period: O perioadă de calendar în ani, luni și zile (P1Y2M3D); se adună la date ținând cont de lungimea lunilor.