If you must manipulate time zone display yourself, you will suffer with java.util.Date and its subclasses (which includes java.sql.Timestamp) because they are zone-less objects. They parse and stringify in the JVM's default time zone, and you cannot use datetime arithmetic to correct this (produces subtle bugs).
Instead, create a java.time.Instant, and then a ZonedDateTime in the desired zone to print. That can be stringified reliably. (Use a date/time formatter for precise control.)