I use java.sql.Timestamp, and use my own PostgreSQL dialect that creates columns with timezone. Default timezone in PostgreSQL is UTC. But (JDBC?) automatically converts the timezone from whatever you are using to the DB default. So my application can use CET, PST and they are all saved as UTC. Amd when I read these timestamp it gets automatically converted back to your application timezone.