Es muy probable que su instancia de DateFormat muestre el valor en la hora local. Cuando se muestra su valor, le daría prueba:
java.util.Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME);
cal.setTime(ts);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(cal.getTime()));
EDIT: a tu comentario:
Qué pasa si uso GMT, tendría que ser un problema en SimpleDateFormat
SimpleDateFormat puede utilice las zonas horarias generales (GMT +/- n), RFC822 y texto ("si tienen nombres" como los estados de JavaDoc - consulte this post para obtener información sobre los nombres).
Díganos, usted es quien hace la pregunta. ¿Realmente lo has intentado? ¿No da los resultados que esperabas? En caso afirmativo, ¿qué esperabas y cuáles fueron los resultados que dio? ¿Y qué le dice la base de datos cuando usa su propia herramienta de consulta? – kdgregory
Sí, lo probé, sí, no está dando los resultados que esperaba. La base de datos tiene un valor UTC y este código agrega +8 al valor ya existente en DB. – kal
Me refiero a +8 horas – kal