Problém je v tom, že Java Date
objekty neukládají časové pásmo. Hodnota je vždy v UTC a je analyzován a formátován v daném časovém pásmu, obvykle výchozím časovém pásmu JVM.
Oracle DATE
sloupce jsou také uloženy bez časového pásma, ale měly by představovat datum, které vidí uživatel. V 99,99 % případů to znamená datum ve výchozím časovém pásmu JVM.
Takže ovladač JDBC přebírá Timestamp
/ Date
hodnota, která je v UTC, ji převede na výchozí časové pásmo a uloží ji do databáze.
Používáte PreparedStatement.setTimestamp(int parameterIndex, Timestamp x)
metoda. Chcete-li ovládat časové pásmo, použijte PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
metoda. Cituji javadoc: