Ce face ZoneId
ZoneId reprezintă un fus orar cu toate regulile lui: diferența față de UTC și datele de trecere la ora de vară, inclusiv cele istorice. Se folosește cu ZonedDateTime, Instant.atZone și LocalDate.now(zona).
ZoneId.of("Europe/Bucharest") alege un fus după numele lui din baza de date IANA (format „Continent/Oraș”). Se acceptă și "UTC" sau diferențe fixe ca "+02:00", dar acestea nu au oră de vară. Un nume necunoscut aruncă ZoneRulesException.
ZoneId.systemDefault() returnează fusul orar setat pe calculatorul sau serverul pe care rulează programul. Rezultatul diferă de la o mașină la alta.
Parametri
| Parametru | Descriere |
|---|---|
id |
Numele fusului orar, de exemplu "Europe/Bucharest", "Europe/Chisinau", "UTC". |
Ce returnează
Un ZoneId.
Exemple
Exemplul 1: Fusul orar al sistemului
Depinde de setările calculatorului.
import java.time.ZoneId;
public class Main {
public static void main(String[] args) {
ZoneId zona = ZoneId.systemDefault();
System.out.println("Fusul orar al sistemului: " + zona);
}
}
Rezultat posibil (diferă la fiecare rulare)
Fusul orar al sistemului: Europe/Bucharest
Exemplul 2: Fusuri alese după nume
import java.time.Instant;
import java.time.ZoneId;
import java.time.zone.ZoneRulesException;
public class Main {
public static void main(String[] args) {
Instant moment = Instant.parse("2026-10-19T12:00:00Z");
for (String id : new String[] {"Europe/Bucharest", "Europe/Chisinau", "UTC", "+05:30"}) {
ZoneId z = ZoneId.of(id);
System.out.println(id + " -> " + moment.atZone(z).toLocalTime() + " (" + z.getRules().getOffset(moment) + ")");
}
try {
ZoneId.of("Europe/Iasi");
} catch (ZoneRulesException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
Europe/Bucharest -> 15:00 (+03:00)
Europe/Chisinau -> 15:00 (+03:00)
UTC -> 12:00 (Z)
+05:30 -> 17:30 (+05:30)
Eroare: Unknown time-zone ID: Europe/Iasi
Exemplul 3: Fusuri disponibile pentru Europa
import java.time.ZoneId;
public class Main {
public static void main(String[] args) {
ZoneId.getAvailableZoneIds().stream()
.filter(z -> z.startsWith("Europe/B"))
.sorted()
.forEach(System.out::println);
}
}
Rezultat
Europe/Belfast
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
Europe/Brussels
Europe/Bucharest
Europe/Budapest
Europe/Busingen
Greșeli frecvente
- Te bazezi pe
systemDefault()într-o aplicație pe server. Serverele sunt des setate pe UTC; dă fusul explicit. - Folosești
ZoneId.of("+02:00")pentru România. Diferența fixă nu trece la ora de vară.
Comenzi înrudite
ZonedDateTime: Data și ora împreună cu fusul orar (Europe/Bucharest); indică un moment exact și știe de ora de vară.ZonedDateTime.withZoneSameInstant: Convertește momentul în alt fus orar: același moment, altă oră pe ceas (14:00 la București = 12:00 la Londra).Instant: Un moment exact pe axa timpului, în UTC, măsurat în secunde și nanosecunde de la 1 ianuarie 1970.LocalDate.now: Returnează data de azi, după ceasul sistemului și fusul orar implicit (sau unul dat ca parametru).