Problem polega na tym, że Java Date
obiekty nie przechowują strefy czasowej. Wartość to zawsze w UTC i jest analizowany i formatowany w określonej strefie czasowej, zwykle domyślnej strefie czasowej JVM.
Oracle DATE
kolumny są również przechowywane bez strefy czasowej, ale powinny przedstawiać datę widzianą przez użytkownika. W 99,99% przypadków oznacza to datę w domyślnej strefie czasowej JVM.
Tak więc sterownik JDBC przyjmuje Timestamp
/ Date
wartość, która jest w UTC, konwertuje ją na domyślną strefę czasową i zapisuje ją w bazie danych.
Używasz PreparedStatement.setTimestamp(int parameterIndex, Timestamp x)
metoda. Aby kontrolować strefę czasową, użyj PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
metoda. Cytując javadoca: