Ce face ZonedDateTime.withZoneSameInstant
withZoneSameInstant răspunde la întrebarea „cât este ceasul în alt oraș în acest moment?”. Momentul rămâne același; se schimbă ora afișată și fusul orar. 14:00 la București vara este 07:00 la New York.
Metoda înrudită withZoneSameLocal face opusul: păstrează ora de pe ceas și schimbă momentul. 14:00 la București devine 14:00 la New York, adică alt moment. Pentru conversii între orașe ai aproape mereu nevoie de withZoneSameInstant.
Parametri
| Parametru | Descriere |
|---|---|
zona |
Fusul orar țintă, de exemplu ZoneId.of("America/New_York"). |
Ce returnează
Un ZonedDateTime nou, în fusul orar cerut.
Exemple
Exemplul 1: Ora unei ședințe online în alte orașe
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
ZonedDateTime sedinta = ZonedDateTime.of(2026, 10, 20, 16, 0, 0, 0, ZoneId.of("Europe/Bucharest"));
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd.MM HH:mm");
for (String oras : new String[] {"Europe/Bucharest", "Europe/London", "America/New_York", "Asia/Tokyo"}) {
ZonedDateTime local = sedinta.withZoneSameInstant(ZoneId.of(oras));
System.out.println(oras + ": " + local.format(f));
}
}
}
Rezultat
Europe/Bucharest: 20.10 16:00
Europe/London: 20.10 14:00
America/New_York: 20.10 09:00
Asia/Tokyo: 20.10 22:00
Exemplul 2: SameInstant față de SameLocal
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZonedDateTime t = ZonedDateTime.of(2026, 10, 19, 14, 0, 0, 0, ZoneId.of("Europe/Bucharest"));
ZoneId ny = ZoneId.of("America/New_York");
ZonedDateTime acelasiMoment = t.withZoneSameInstant(ny);
ZonedDateTime aceeasiOra = t.withZoneSameLocal(ny);
System.out.println("Original: " + t);
System.out.println("SameInstant: " + acelasiMoment + " același moment? " + acelasiMoment.isEqual(t));
System.out.println("SameLocal: " + aceeasiOra + " același moment? " + aceeasiOra.isEqual(t));
}
}
Rezultat
Original: 2026-10-19T14:00+03:00[Europe/Bucharest]
SameInstant: 2026-10-19T07:00-04:00[America/New_York] același moment? true
SameLocal: 2026-10-19T14:00-04:00[America/New_York] același moment? false
Greșeli frecvente
- Folosești
withZoneSameLocalpentru conversie între orașe. Ora rămâne aceeași, dar momentul se schimbă: ședința ar fi programată greșit. - Compari momente din fusuri diferite cu
equals.equalscompară și fusul orar; pentru „același moment” foloseșteisEqual.
Comenzi înrudite
ZonedDateTime: Data și ora împreună cu fusul orar (Europe/Bucharest); indică un moment exact și știe de ora de vară.ZoneId: Identifică un fus orar (Europe/Bucharest) cu regulile lui de oră de vară; of îl alege, systemDefault dă fusul sistemului.Instant: Un moment exact pe axa timpului, în UTC, măsurat în secunde și nanosecunde de la 1 ianuarie 1970.DateTimeFormatter: Descrie cum se scrie sau se citește o dată ca text; ofPattern(„dd.MM.yyyy”) creează un format din litere.