Problemet är att Java Date
objekt lagrar inte en tidszon. Värdet är alltid i UTC, och tolkas och formateras i en given tidszon, vanligtvis JVM:s standardtidszon.
Oracle DATE
kolumner lagras också utan tidszon, men bör representera datumet som användaren ser det. I 99,99 % av fallen betyder det datumet i JVM:s standardtidszon.
Så JDBC-drivrutinen tar Timestamp
/ Date
värde, som är i UTC, konverterar det till standardtidszonen och sparar det i databasen.
Du använder PreparedStatement.setTimestamp(int parameterIndex, Timestamp x)
metod. För att kontrollera tidszonen, använd PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
metod. Citerar javadoc: