Het fundamentele probleem is dat een java.sql.Timestamp geen tijdzone-informatie bevat. Ik denk dat het altijd wordt aangenomen dat het "lokale tijdzone" is.
Een oplossing die ik kan bedenken is om geen parameter in een PreparedStatement te gebruiken, maar een letterlijke tijdzone in SQL:
update foo
set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`;
Een andere mogelijke oplossing zou kunnen zijn om een correct geformatteerde String door te geven aan een PrepareStatement dat to_timestamp():
gebruiktString sql = "update foo set ts_col = to_timestamp(?, 'yyyy-mm-dd hh24:mi:ss')";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "2012-08-24 14:00:00 +02:00");