LocalDate.withDayOfMonth în Java

Returnează o copie a datei cu ziua din lună schimbată; anul și luna rămân aceleași.

Sintaxă
LocalDate withDayOfMonth(int zi)

Ce face LocalDate.withDayOfMonth

withDayOfMonth(1) dă prima zi a lunii datei. Este des folosită pentru rapoarte lunare: „de la 1 până azi”. Ultima zi a lunii se obține cu withDayOfMonth(d.lengthOfMonth()).

Spre deosebire de plusMonths, metoda nu ajustează singură: withDayOfMonth(31) pe o dată din aprilie aruncă DateTimeException. Metode asemănătoare: withMonth, withYear, withDayOfYear.

Pentru calcule mai complexe („prima luni din lună”, „ultima zi a anului”) există d.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)) din java.time.temporal.

Parametri

Parametru Descriere
zi Noua zi din lună, între 1 și numărul de zile al lunii.

Ce returnează

Un LocalDate nou. Aruncă DateTimeException dacă ziua nu există în acea lună.

Exemple

Exemplul 1: Prima și ultima zi a lunii

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        LocalDate azi = LocalDate.of(2026, 2, 17);
        LocalDate prima = azi.withDayOfMonth(1);
        LocalDate ultima = azi.withDayOfMonth(azi.lengthOfMonth());
        System.out.println("Raport de la " + prima + " până la " + azi);
        System.out.println("Luna se termină pe " + ultima);
        System.out.println("Salariul vine pe " + azi.withDayOfMonth(10));
    }
}

Rezultat

Raport de la 2026-02-01 până la 2026-02-17
Luna se termină pe 2026-02-28
Salariul vine pe 2026-02-10

Exemplul 2: Ziua nu există în lună

import java.time.DateTimeException;
import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        LocalDate aprilie = LocalDate.of(2026, 4, 5);
        try {
            System.out.println(aprilie.withDayOfMonth(31));
        } catch (DateTimeException e) {
            System.out.println("Eroare: " + e.getMessage());
        }
        // Sigur: limitează ziua la lungimea lunii
        int zi = Math.min(31, aprilie.lengthOfMonth());
        System.out.println("Ultima zi validă: " + aprilie.withDayOfMonth(zi));
    }
}

Rezultat

Eroare: Invalid date 'APRIL 31'
Ultima zi validă: 2026-04-30

Exemplul 3: Prima zi de luni din lună cu TemporalAdjusters

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class Main {
    public static void main(String[] args) {
        LocalDate d = LocalDate.of(2026, 11, 20);
        System.out.println("Prima luni: " + d.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
        System.out.println("Ultima vineri: " + d.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)));
        System.out.println("Ultima zi din an: " + d.with(TemporalAdjusters.lastDayOfYear()));
    }
}

Rezultat

Prima luni: 2026-11-02
Ultima vineri: 2026-11-27
Ultima zi din an: 2026-12-31

Greșeli frecvente

  • Folosești withDayOfMonth(31) pentru „ultima zi a lunii”. În lunile cu 30 de zile aruncă excepție; folosește lengthOfMonth() sau TemporalAdjusters.lastDayOfMonth().
  • Uiți că metoda returnează o dată nouă și nu salvezi rezultatul.

Comenzi înrudite

  • LocalDate.isLeapYear: isLeapYear spune dacă anul datei este bisect; lengthOfMonth dă numărul de zile din luna datei (28-31).
  • LocalDate.plusMonths: Adaugă un număr de luni; dacă ziua nu există în luna rezultată, se folosește ultima zi a acelei luni.
  • LocalDate.getDayOfWeek: Returnează ziua săptămânii pentru dată, ca valoare a enumerării DayOfWeek (MONDAY … SUNDAY).
  • LocalDate: Clasa pentru o dată calendaristică fără oră și fără fus orar: an, lună, zi. Obiectele ei nu se pot modifica.