Хотя это явно не определяется для setTimestamp (интервал parameterIndex, Метка времени x)
, водители должны следовать правилам, установленным setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
javadoc:
Устанавливает обозначенный параметр на даваемый <кодовый> java.sql. Метка времени стоимость, используя данный Календарь
объект. Водитель использует , Календарь
возражает, чтобы построить SQL МЕТКА ВРЕМЕНИ
стоимость, которую водитель тогда посылает в базу данных. С Календарь
объект, водитель может вычислить метку времени, принимающую во внимание таможенный часовой пояс. Если никакой Календарь
объект определяется, водитель использует часовой пояс по умолчанию, который является часовым поясом виртуальной машины, запускающей приложение.
Когда вы звоните с setTimestamp (интервал parameterIndex, Метка времени x)
, водитель JDBC использует часовой пояс виртуальной машины, чтобы вычислить дату и время метки времени в том часовом поясе. Эта дата и время - то, что сохранено в базе данных, и если колонка базы данных не хранит информацию часового пояса, то любая информация о зоне потеряна (что означает, что это до применения (применений), используя базу данных, чтобы последовательно использовать тот же самый часовой пояс или придумать другую схему различить часовой пояс (т.е. магазин в отдельной колонке).
Например: Ваша зона местного времени - GMT+2. Вы храните "2012-12-25 10:00:00 UTC". Фактическое значение, сохраненное в базе данных, "2012-12-25 12:00:00". Вы восстанавливаете его снова: вы возвращаете его снова как "2012-12-25 10:00:00 UTC" (но только если вы восстанавливаете, это, используя getTimestamp (..)
), но когда другой доступы к приложениям база данных в часовом поясе GMT+0, это восстановит метку времени как "2012-12-25 12:00:00 UTC".
Если вы хотите сохранить его в различном часовом поясе, то необходимо использовать setTimestamp (интервал parameterIndex, Метка времени x, Календарь cal)
с Календарным случаем в необходимом часовом поясе. Просто удостоверьтесь, что вы также используете эквивалентного получателя с тем же самым часовым поясом, восстанавливая ценности (если вы используете МЕТКУ ВРЕМЕНИ
без информации о часовом поясе в вашей базе данных).
Так, принятие вас хочет сохранить фактический часовой пояс GMT, необходимо использовать:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
stmt.setTimestamp(11, tsSchedStartTime, cal);
С JDBC 4.2 послушный водитель должен поддержать java.time. LocalDateTime
(и java.time. LocalTime
) для МЕТКА ВРЕМЕНИ
(и ВРЕМЯ
) через get/set/updateObject
. java.time. Местный*
классы без часовых поясов, таким образом, никакое преобразование не должно быть применено (хотя это могло бы открыть новый набор проблем, если бы ваш код действительно принимал определенный часовой пояс).