Вычитание двух столбцов типа timestamp с часовым поясом - PullRequest
0 голосов
/ 08 мая 2018

Я конвертирую некоторые типы столбцов из TIMESTAMP WITHOUT TIME ZONE в TIMESTAMP WITH TIME ZONE.

Некоторые функции, которые уже существуют в системе, вычисляют разницу между двумя временными метками, просто делая что-то вроде: timestamp1 - timestamp2.

Мне интересно, правильный ли этот подход при работе с часовыми поясами. Решение, о котором я думаю, следующее:

timestamp1 at time zone 'America/Sao_Paulo' - timestamp2 at time zone 'America/Sao_Paulo'

Но вопрос в следующем: этот подход корректно обрабатывает изменения летнего времени? Так безопасно вычесть метки времени из часового пояса?

Спасибо!

1 Ответ

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

Это не безопасно. Рассмотрим этот пример:

SELECT TIMESTAMPTZ '2018-02-18 02:00:00+00' AT TIME ZONE 'America/Sao_Paulo'
     - TIMESTAMPTZ '2018-02-18 01:00:00+00' AT TIME ZONE 'America/Sao_Paulo';

 ?column? 
----------
 00:00:00
(1 row)

Это потому, что эти разные абсолютные временные метки выглядят одинаково в этом часовом поясе. Арифметика даты с timestamp without time zone просто не верна, потому что разница зависит от часового пояса.

Чтобы найти истекшее время между двумя timestamp with time zone значениями, просто вычтите их:

SELECT TIMESTAMPTZ '2018-02-18 02:00:00+00'
     - TIMESTAMPTZ '2018-02-18 01:00:00+00';

 ?column? 
----------
 01:00:00
(1 row)

Этот результат всегда верен, потому что используется абсолютное время.

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