import java.time.Duration;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class JadwalPenerbangan {
    public static void main(String[] args) {
        DateTimeFormatter tampil = DateTimeFormatter.ofPattern("dd MMMM yyyy HH:mm")
                .withLocale(Locale.forLanguageTag("id"));

        // Penerbangan CGK -> NRT: berangkat dari Jakarta, tiba di Tokyo.
        ZonedDateTime berangkat =
                ZonedDateTime.of(2026, 3, 15, 9, 0, 0, 0, ZoneId.of("Asia/Jakarta"));
        Duration durasiTerbang = Duration.ofHours(7).plusMinutes(15);

        ZonedDateTime tibaTokyo = berangkat.plus(durasiTerbang)
                .withZoneSameInstant(ZoneId.of("Asia/Tokyo"));

        System.out.println("Berangkat (WIB) : " + berangkat.format(tampil));
        System.out.println("Durasi terbang  : " + durasiTerbang);
        System.out.println("Tiba (JST)      : " + tibaTokyo.format(tampil));
        System.out.println("Tiba (UTC)      : " + tibaTokyo.toInstant());

        // Penerbangan pulang NRT -> CGK: berangkat dari Tokyo, tiba di Jakarta.
        ZonedDateTime pulang =
                ZonedDateTime.of(2026, 3, 20, 11, 0, 0, 0, ZoneId.of("Asia/Tokyo"));
        Duration durasiPulang = Duration.ofHours(7).plusMinutes(30);

        ZonedDateTime tibaJakarta = pulang.plus(durasiPulang)
                .withZoneSameInstant(ZoneId.of("Asia/Jakarta"));

        System.out.println("Pulang (JST)    : " + pulang.format(tampil));
        System.out.println("Tiba (WIB)      : " + tibaJakarta.format(tampil));
    }
}
