import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class KonversiKeInstant {
    public static void main(String[] args) {
        // Date -> Instant: titik waktu absolut tanpa tergantung zona default.
        Date tanggalLama = new Date(1768438800000L);
        Instant instant = tanggalLama.toInstant();
        System.out.println("Date                 : " + tanggalLama);
        System.out.println("Date.toInstant()     : " + instant);

        // Instant -> Date: untuk API lama yang masih meminta java.util.Date.
        Date kembali = Date.from(instant);
        System.out.println("Date.from(instant)   : " + kembali);

        // GregorianCalendar -> ZonedDateTime.
        GregorianCalendar kalender =
                new GregorianCalendar(2026, Calendar.FEBRUARY, 15, 8, 0, 0);
        ZonedDateTime zdt = kalender.toZonedDateTime();
        System.out.println("toZonedDateTime()    : " + zdt);

        // ZonedDateTime -> GregorianCalendar: arah sebaliknya tetap tersedia.
        ZonedDateTime jadwal =
                ZonedDateTime.of(LocalDateTime.of(2026, 3, 15, 9, 0), ZoneId.of("Asia/Jakarta"));
        GregorianCalendar hasil = GregorianCalendar.from(jadwal);
        System.out.println("GregorianCalendar.from(): " + hasil.getTime());
    }
}
