Vấn đề cơ bản là java.sql.Timestamp không chứa thông tin múi giờ. Tôi nghĩ rằng nó luôn được giả định là "múi giờ địa phương".
Giải pháp mà tôi có thể nghĩ đến là không sử dụng một tham số trong PreparedStatement, mà sử dụng một ký tự múi giờ trong SQL:
update foo
set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`;
Một giải pháp khả thi khác có thể là chuyển một Chuỗi được định dạng đúng đến Chuẩn bị sẵn sàng sử dụng to_timestamp ():
String 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");