Convierta la marca de tiempo de Unix entre diferentes zonas horarias y diferentes DST en Java

PROBLEMA RESUELTO El dispositivo externo estaba computando y enviando una marca de tiempo no estándar de 2 horas, lo que me confundió enormemente e inició este hilo.TIMESTAMP POR SI MISMO NO ES AFECTADO POR TIMEZONES , las zonas horarias se aplican solo al convertir en / desde formas legibles por humanos.

Tengo la marca de tiempo (segundos de la época de Unix) en la zona horaria UTC, sin horario de verano (horario de verano).

Quiero la marca de tiempo (segundos de la época de Unix) en la zona horaria "Europa / Praga", que usa DST.

Solía ​​pensar que la marca de tiempo de Unix no está vinculada a las zonas horarias, que las zonas horarias solo afectan el proceso de conversión de la marca de hora a formatos legibles por humanos. Pero no se ve así. Y mientras más estoy intentando convertirlo (usando las clases de Calendario y Zona horaria), más confuso y perdido me estoy volviendo.

este código NO funciona como se esperaba:

Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.setTimeInMillis(ts*1000);
cal.setTimeZone(TimeZone.getTimeZone("Europe/Prague"));
return cal.getTimeInMillis()/1000;

Respuestas a la pregunta(4)

Su respuesta a la pregunta