Ce face DateTimeFormatter
DateTimeFormatter este „șablonul” folosit de format și parse. Cel mai des îl creezi cu ofPattern, din litere: d zi, M lună, y an, H oră (0-23), m minut, s secundă, E ziua săptămânii. Numărul de litere contează: M = 3, MM = 03, MMM = mar., MMMM = martie.
Al doilea parametru, Locale, alege limba numelor de luni și de zile: Locale.of("ro") pentru română. Textul fix se scrie între apostrofuri ('ora').
Un DateTimeFormatter este imutabil și sigur pentru mai multe fire de execuție, deci îl poți ține într-o constantă static final și folosi oriunde. Există și formate gata făcute: ISO_LOCAL_DATE, ISO_LOCAL_DATE_TIME, ISO_INSTANT.
Parametri
| Parametru | Descriere |
|---|---|
sablon |
Literele formatului, de exemplu "dd.MM.yyyy HH:mm". |
limba |
Opțional. Limba numelor de luni/zile, de exemplu Locale.of("ro"). |
Ce returnează
Un DateTimeFormatter. Un șablon greșit aruncă IllegalArgumentException.
Exemple
Exemplul 1: Litere și număr de litere
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Locale ro = Locale.of("ro");
LocalDateTime t = LocalDateTime.of(2026, 3, 8, 9, 5);
String[] sabloane = {"d.M.yy", "dd.MM.yyyy", "d MMM yyyy", "d MMMM yyyy", "EEE, HH:mm", "EEEE 'ora' H:mm"};
for (String s : sabloane) {
System.out.printf("%-18s -> %s%n", s, t.format(DateTimeFormatter.ofPattern(s, ro)));
}
}
}
Rezultat
d.M.yy -> 8.3.26
dd.MM.yyyy -> 08.03.2026
d MMM yyyy -> 8 mar. 2026
d MMMM yyyy -> 8 martie 2026
EEE, HH:mm -> dum., 09:05
EEEE 'ora' H:mm -> duminică ora 9:05
Exemplul 2: Un formatter folosit în tot programul
Același obiect formatează și citește. Constanta se creează o singură dată.
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
static final DateTimeFormatter RO = DateTimeFormatter.ofPattern("dd.MM.yyyy");
public static void main(String[] args) {
LocalDate d = LocalDate.parse("08.03.2026", RO);
System.out.println("Citit: " + d);
System.out.println("Scris: " + RO.format(d.plusWeeks(1)));
System.out.println("Ca text: " + d.format(RO));
}
}
Rezultat
Citit: 2026-03-08
Scris: 15.03.2026
Ca text: 08.03.2026
Exemplul 3: Șablon invalid
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
try {
DateTimeFormatter.ofPattern("dd.MM.yyyy {ora}");
} catch (IllegalArgumentException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
Eroare: Pattern includes reserved character: '{'
Greșeli frecvente
- Confunzi
MM(lună) cumm(minut) sauHH(0-23) cuhh(1-12). - Folosești
YYYY(anul săptămânii ISO) în loc deyyyy. Pe 28-31 decembrie poate afișa anul următor. - Creezi formatter-ul din nou în fiecare iterație a unei bucle. Funcționează, dar este inutil; ține-l într-o constantă.
Comenzi înrudite
DateTimeFormatter.format: Scrie o dată, o oră sau un moment ca text, după formatul acestui DateTimeFormatter.DateTimeFormatter.ISO_LOCAL_DATE: Formatul standard ISO pentru date, aaaa-ll-zz (2026-10-19); este formatul implicit al LocalDate.LocalDate.format: Transformă data într-un text după un șablon, de exemplu dd.MM.yyyy sau „luni, 19 octombrie 2026”.LocalDate.parse: Transformă un text într-o dată: implicit formatul ISO 2026-10-19, sau orice format dat printr-un DateTimeFormatter.