Проблемът е, че Java Date
обектите не съхраняват часова зона. Стойността е винаги в UTC и се анализира и форматира в дадена часова зона, обикновено часовата зона по подразбиране на JVM.
Oracle DATE
колоните също се съхраняват без часова зона, но трябва да представляват датата, както се вижда от потребителя. В 99,99% от случаите това означава датата в часовата зона по подразбиране на JVM.
И така, JDBC драйверът взема Timestamp
/ Date
стойност, която е в UTC, я преобразува в часовата зона по подразбиране и я записва в базата данни.
Вие използвате PreparedStatement.setTimestamp(int parameterIndex, Timestamp x)
метод. За да контролирате часовата зона, използвайте PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
метод. Цитирайки javadoc: