Я хотел проверить некоторые отличия с меткой времени и меткой времени с полями часовых поясов. Но я наткнулся на то, что я не могу понять, почему он работает так.Хранить/извлекать временную метку с временной зоной или без нее
У меня есть следующие настройки:
CREATE TABLE tbl_test_timezones (
first_date timestamp with time zone,
second_date timestamp
)
Я вставил некоторые Testdata:
insert into tbl_test_timezones (first_date, second_date) values (now(), now());
Теперь я хотел проверить разницу между этими двумя областями, когда я делаю выберите
select
first_date,
first_date at time zone 'Europe/Brussels' as first_date_wt,
second_date,
second_date at time zone 'Europe/Brussels' as second_date_wt
from tbl_test_timezones
which gives me the following result
first_date: 2016-10-03 07:03:16.63818+00
first_date_wt: 2016-10-03 09:03:16.63818
second_date: 2016-10-03 07:03:16.63818
second_date_wt: 2016-10-03 05:03:16.63818+00
Вопрос 1
Мне интересно, почему second_date_wt делает -2 вместо +2, например first_date_wt?
Вопрос 2
Допустим моим приложение хранит метки времени с часовым поясом, и пользователь хочет получить некоторые записи с этой меткой времени. Вам нужно сохранить какие-то пользовательские настройки для пользователя, где он может ввести свой часовой пояс и всегда включать это в запрос выбора при их получении? Или вы предпочитаете просто получать его и делать это в часовом поясе в клиентском приложении?
, например:
select start_date at time zone (
select user_time_zone from tbl_user_settings where user_id = 2
)
from tbl_projects
или сделать только
select start_date
from tbl_projects
ответы на первый вопрос простой способ запомнить разницу, спасибо! Также не знал, что вы можете установить часовой пояс с ключевым словом SET. Большой! Но что бы вы сделали, когда ваши клиенты находятся в разных часовых поясах, вы всегда делаете SET TIMEZONE = xxxxx для каждого запроса? – koala
Если один сеанс должен обслуживать клиентов в разных часовых поясах, например, в пуле соединений, вам нужно будет устанавливать часовой пояс при каждом переключении клиентов. Но вы должны сделать то же самое в своем приложении, если будете обрабатывать часовые пояса в своем коде приложения, не так ли? –
В моем случае у меня есть REST API, где клиент может подключиться. Поэтому, если я сохраняю отметки времени как «метка времени с зоной», и я получаю данные, мне нужно только установить клиентское приложение в правильный часовой пояс, чтобы показать правильное время, не так ли? Нет необходимости в том, чтобы мой бэкэнд знал, в какой временной зоне находится конечный пользователь? – koala