TIMESTAMP против TIMESTAMPTZ правильное значение, принимая разницу во времени - PullRequest
0 голосов
/ 24 мая 2018

Для запроса:

SELECT '2018-03-01'::TIMESTAMP - '2018-09-01'::TIMESTAMP, 
       '2018-03-01'::TIMESTAMPTZ - '2018-09-01'::TIMESTAMPTZ;

возвращаются значения -184 days для TIMESTAMP и -183 days -23:00:00 для TIMESTAMPTZ.

Мне кажется, -184 days ""правильно, но мне всегда говорили использовать TIMESTAMPTZ.Какой правильный ответ?

1 Ответ

0 голосов
/ 24 мая 2018

Ответ опубликован в качестве дополнения к обсуждению комментария по вопросу OP.


Тип данных timestamptz фактически является меткой времени с часовым поясом, в то время как timestamp является меткой времени без часового пояса.

Результат, полученный при вычитании этих конкретных дат, как показано ниже, является правильным с разницей в 1 час

SELECT '2018-03-01'::TIMESTAMPTZ - '2018-09-01'::TIMESTAMPTZ;

, потому что 2018-03-01::timestamptz имеет +01, тогда как 2018-09-01 имеет +02.

Убедитесь сами в этом вопросе

SELECT '2018-03-01'::TIMESTAMPTZ, '2018-09-01'::TIMESTAMPTZ

Разница в 1 час Скорее всего обусловлено переходом на летнее время и изменением часового пояса во времени.


ВВ общем, я бы всегда включал в свою систему часовые пояса, чтобы правильно обрабатывать разницу во всем мире и избегать проблем, которые могут возникнуть из-за отсутствия этого.Клиент и сервер могут иметь разные часовые пояса, что может привести к проблемам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...