Преобразование часовой пояс UTC в postgresql в EST (по местному времени)

Я новичок в PostgreSQL, и мне было интересно, есть ли прямой способ просто преобразовать значения метки времени в таблицу в другой часовой пояс, используя функцию. В моем случае это UTC к EST.

Это значения, например, что мне нужно преобразовать в EST (не только одно значение, но и все значения в таблице)

date
-------------------
2015-10-24 16:38:46
2016-01-19 18:27:00
2016-01-24 16:14:34
2016-02-09 23:05:49
2016-02-11 20:46:26

Ответ 1

Здесь, в Лондоне, сейчас на 1 час больше, чем в UTC. Итак - если я возьму ваш часовой пояс без отметки времени и скажу, что это в UTC, я получу его для моего локального часового пояса.

richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC');
        timezone        
------------------------
 2015-10-24 17:38:46+01
(1 row)

Но вы хотите "EST", который, кажется, находится где-то в Северной и Южной Америке, судя по возвращенной стоимости. Вы можете обернуть выражение в маленькую функцию SQL, если хотите.

richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC') AT TIME ZONE 'EST';
      timezone       
---------------------
 2015-10-24 11:38:46
(1 row)

Изменение: как это сделать в запросе

SELECT ((stored_timestamp AT TIME ZONE 'UTC') AT TIME ZONE 'EST') AS local_timestamp
FROM my_table;

Вероятно, вы захотите получить вступительную книгу по SQL, если это вызывает проблемы.

Ответ 2

Аналогичным образом выполняйте

SELECT '2015-10-24 16:38:46'::timestamp AT time zone 'EST';

timezone
------------------------
 2015-10-24 21:38:46+00
(1 row)

Ответ 3

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

Если у вас есть операция, которая автоматически заполняет дату системными часами вашего сервера, вы можете либо A: изменить операцию на использование времени UTC. B: изменить системные часы на сервере на UTC

Ответ 4

У меня была та же проблема, я работаю с разными регионами и часовыми поясами, мне нужно просто исправить часовой пояс в запросе так, чтобы он не влиял на других клиентов по регионам, и я не изменил структуру таблицы или что-то еще (открыто-закрыто принцип). Что я сделал в своем запросе: ВЫБЕРИТЕ TO_CHAR (current_timestamp в часовом поясе "Австралия/Мельбурн", "ДД/ММ/ГГГГ чч24: мили AM") как date_of_extract Это сработало для меня, и я мог изменить часовой пояс UTC для моего postgressql на "Австралия/Мельбурн" (любой часовой пояс, который вы просматриваете). надеюсь, что это полезно.