Смещение часового пояса в PostgreSQL - PullRequest
33 голосов
/ 21 января 2010

Мое веб-приложение хранит все временные метки в формате UTC без часовых поясов. У меня есть сценарий shell / psql, который возвращает список последних входов в систему, и я хочу, чтобы этот сценарий отображал время входа в систему в локальном часовом поясе сервера (который может варьироваться в зависимости от того, где находится сервер и при переходе на летнее время).

Чтобы получить интервал, представляющий разницу между часовым поясом моего сервера баз данных и UTC, я в настоящее время использую этот хак:

SELECT age(now() at time zone 'UTC', now());

Это работает, но есть ли более простой способ?

Существует параметр конфигурации сервера под названием «часовой пояс», который возвращает допустимую строку часового пояса, но я не думаю, что возможно получить доступ к этим параметрам в запросе. (Думаю, это отдельный вопрос, но ответ на него решит проблему с часовым поясом.)

Ответы [ 2 ]

53 голосов
/ 21 января 2010
SELECT  current_setting('TIMEZONE')

Это можно использовать в запросе, однако это не дает числовой разницы.

Ваше решение в порядке.

7 голосов
/ 11 декабря 2013

Чтобы получить разницу в # секунд в виде целого числа, я использовал просто:

select extract( timezone from now() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...