Как мне манипулировать отметкой времени в UTC, чтобы иметь возможность добавлять смещение?
Я знаю основы здесь: http://blog.untrod.com/2016/08/actually-understanding-timezones-in-postgresql.html
Но пока не найдено правильное решение этой проблемы:
База данных Psql находится в UTC, для даты, хранящейся в db, я хочу передать зону и получить правильный результат часового пояса: скажем, прохождение Европа / Берлин должно привести к: 2018-02-03 02:00:00 + 00 -> 2018-02-03 04: 00: 00 + 02: 00
Когда я использую select my_date with time zone 'Europe/Berlin'
, будет увеличивать час правильно, но, к сожалению, срезать смещение.Одно решение, которое я нашел, это «установить часовой пояс = Европа / Берлин» перед запросом, который работает, как талисман, когда я использую его из чистого SQL.Однако, когда я пытаюсь вызвать его как nativequery, это приводит к ошибке, возможно, потому что это не DML-запрос.
Я попытался установить часовой пояс сеанса из кода Java для сеанса:
session = HibernateUtil.getSessionFactory().withOptions()
.jdbcTimeZone(TimeZone.getTimeZone("Europe/Berlin"))
.openSession();
Но запрос в том же сеансе (SELECT current_setting('TIMEZONE');
) говорит, что это все еще UTC.
Я могу преодолеть эту проблему с помощью кода (преобразование результата из кода Java в соответствии с зоной), однако я хочу сделатьэто из sql запроса.
Возможно ли это как-то?