Problemet er, at Java Date
objekter gemmer ikke en tidszone. Værdien er altid i UTC, og er parset og formateret i en given tidszone, normalt JVM'ens standardtidszone.
Oracle DATE
kolonner gemmes også uden tidszone, men skal repræsentere den dato, som brugeren har set. I 99,99 % af tilfældene betyder det datoen i JVM'ens standardtidszone.
Så JDBC-driveren tager Timestamp
/ Date
værdi, som er i UTC, konverterer den til standardtidszonen og gemmer den i databasen.
Du bruger PreparedStatement.setTimestamp(int parameterIndex, Timestamp x)
metode. For at kontrollere tidszonen skal du bruge PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
metode. Citerer javadoc: