import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

/*
 * Change the JVM's ZoneId, ZoneId.systemDefault() to the required ZoneId e.g. ZoneId.of("America/New_York")
 */
public class Main {
	public static void main(String[] args) {
		// Test
		ZoneId zoneId = ZoneId.of("Etc/UTC");
		ZonedDateTime zdt = ZonedDateTime.of(LocalDate.of(2021, 5, 10), LocalTime.of(15, 20), zoneId);
		System.out.println(zdt + " is " + convertFromZdtToLdt(zdt) + " at " + ZoneId.systemDefault().getId());

		LocalDateTime ldt = LocalDateTime.of(LocalDate.of(2021, 5, 10), LocalTime.of(15, 20));
		System.out
				.println(ldt + " at " + ZoneId.systemDefault().getId() + " is " + convertFromLdtZdtToZdt(ldt, zoneId));
	}

	public static LocalDateTime convertFromZdtToLdt(ZonedDateTime zdt) {
		return zdt.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime();
	}

	public static ZonedDateTime convertFromLdtZdtToZdt(LocalDateTime ldt, ZoneId targetZoneId) {
		return ldt.atZone(ZoneId.systemDefault()).withZoneSameInstant(targetZoneId);
	}
}