You are best to get a Timestamp from a LocalDateTime, rather than from an Instant.
The first step is to take your ZonedDateTime and convert it to GMT:
ZonedDateTime gmt = zdt.withZoneSameInstant(ZoneId.of("GMT"));
Then you can convert it to a Timestamp via a LocalDateTime:
Timestamp timestamp = Timestamp.valueOf(gmt.toLocalDateTime());