pgsql | Unsorted

Telegram-канал pgsql - pgsql – PostgreSQL

9404

Чат русскоязычного сообщества PostgreSQL, здесь мы обсуждаем технические вопросы, для поиска работы и предложения вакансий есть группа https://t.me/pgsqljobs For English discussion visit https://t.me/pg_sql

Subscribe to a channel

pgsql – PostgreSQL

Я не понимаю, что такое "рабочее" время.

Читать полностью…

pgsql – PostgreSQL

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

Читать полностью…

pgsql – PostgreSQL

Зачем, для решения какой задачи? ;)
Это время и так изоморфно тому времени, которое было у пользователя (точнее, это буквально одно и то же).

Читать полностью…

pgsql – PostgreSQL

Почему? Это offset, который был у пользователя, от которого приехало значение временной метки (и оно никак не связано с вами, и никак не связано с меткой в формате UTC/GMT с нулевым смещением, т.е. про него можно "забыть").

Пример:
Сейчас я в Нью-Йорке, у меня локальное время 05:17 утра (и оно в формате GMT-04:00, таков уж там часовой пояс). Я пришел к вам в сервис и он записал моё время. Получилось:
created_on = 09:17, offset = GMT-04:00

Однако, если вы created_on приведете к timestamptz корректно и выведете у себя, вы получите 12:17, т.е. московское время (GMT+03:00).

Читать полностью…

pgsql – PostgreSQL

Я ожидаю, что к столбцу created_on прибавиться время как в offset. Если посмотреть на стручку где оффсет +7, то там тоже прибавляет +3 часа

Читать полностью…

pgsql – PostgreSQL

Ну смотрите, мы с помощью AT TIME ZONE 'UTC' показываем, что в этом столбце с типом timestamp хранится временная метка в формате UTC/GMT. После оного приведения этот столбец (ну, текущее выражение, точнее) становится типа timestamptz и далее он выводится на клиент в локальном формате времени (в вашем случае по Москве, т.е. в UTC/GMT+03) — стандартное поведение для типа timestamptz.

Иначе говоря, то, что везде "прибавляется 3 часа" — так и должно быть на вашем клиенте, ведь теперь время отображается не как UTC, а как UTC+3 (в локальном для вас формате).

Читать полностью…

pgsql – PostgreSQL

не знал. =) должно подойти.
я краем мозга вспомнил линуксовый tr, когда возился, но тут же и забыл.

Читать полностью…

pgsql – PostgreSQL

И как насчет:

SELECT translate(ts, '+-', '-+')


;)

Читать полностью…

pgsql – PostgreSQL

и это поправить у меня получилось только через уродливый CASE. пример:

postgres=# WITH tz AS (SELECT unnest(ARRAY['GMT-03:00', 'GMT+08:00']) AS offset) SELECT CASE WHEN "offset" ~ '^GMT\+' THEN replace(tz."offset", '+', '-') WHEN "offset" ~ '^GMT\-' THEN replace(tz."offset", '-', '+') END FROM tz;
replace
-----------
GMT+03:00
GMT-08:00
(2 rows)

Time: 0,986 ms

Читать полностью…

pgsql – PostgreSQL

В столбце created_on время в utc

Читать полностью…

pgsql – PostgreSQL

Потому что 05:08GMT+05 это 00:08GMT, и это тоже самое что 03:08GMT+03. Формально, не то чтоб поэтому, но так работают часовые пояса, да (по определению формы этой записи).

Но, давайте начнем с малого: в столбце created_on указано локальное время, или же время в UTC/GMT (без всякого смещения, т.е., приведено специальным образом к этому формату)? Это кардинально меняет дальнейшие шаги. Изначально я его интерпретирую как первый случай, но может зря...

Читать полностью…

pgsql – PostgreSQL

Почему ж вы так решили то? Всё правильно он показывает (если у вас в столбце created_on не время в UTC/GMT, а локальное, конечно).

Напр., 05:08GMT+05 это как раз 03:08GMT+03, как в вашей выделенной синим строке.

Читать полностью…

pgsql – PostgreSQL

(c.created_on || replace (tz.offset, 'GMT',''))::timestamptz as created_on2 — не работает,
c.created_on::timestamp AT TIME ZONE 'GMT' AT TIME zone replace (tz.offset, '+','-') as created_on3 - работает

Читать полностью…

pgsql – PostgreSQL

а как такое можно поправить, в offset заменить + на - ? 😳

Читать полностью…

pgsql – PostgreSQL

c.created_on::timestamp AT TIME ZONE 'GMT' AT TIME zone tz.offset — почему то переводит наоборот где прибавить - отнимает

Читать полностью…

pgsql – PostgreSQL

в целом этот скрипт работает c.created_on::timestamp AT TIME ZONE 'GMT' AT TIME zone translate (tz.offset, '+-','-+')

Читать полностью…

pgsql – PostgreSQL

set timezone TO 'GMT';

Читать полностью…

pgsql – PostgreSQL

Мне московское время не нужно, нужно время места где был пользователь

Читать полностью…

pgsql – PostgreSQL

прибавляет ваш часовой пояс ?

Читать полностью…

pgsql – PostgreSQL

Что вас смущает? Вместо немого скриншота всегда рекомендую указывать ожидаемый результат и почему вы его ожидаете (а скриншот зачтем за "актуальный").

Читать полностью…

pgsql – PostgreSQL

У вас created_on это столбец timestamp или timestamptz?

Читать полностью…

pgsql – PostgreSQL

Он всем прибавляет 3 часа....

Читать полностью…

pgsql – PostgreSQL

Коллега уверяет, что в столбце created_on уже приведенное время к UTC/GMT, т.е. столбец offset вообще не требуется для работы с этим временем как таковым.

Читать полностью…

pgsql – PostgreSQL

Хм, так тогда достаточно сделать:

created_on AT TIME ZONE 'UTC'


Казалось бы. А про столбец offset забыть — он не нужен ;)

Читать полностью…

pgsql – PostgreSQL

потому

Читать полностью…

pgsql – PostgreSQL

что-то я не понимаю, почему 05:08GMT+05 это не 10ч?

Читать полностью…

pgsql – PostgreSQL

да, в вашем случае работает.
есть одна проблема: если у вас в tz.offset записано, к примеру, GMT-08:00 (или любой другой оффсет с GMT-), то это не сработает.

Читать полностью…

pgsql – PostgreSQL

Так я вам выше костыльный вариант привел — но он работает (тот, что с replace).

С другой стороны, я бы обратился к тому, что "выдумал" такую сомнительную схему хранения зоны (и оправдал её хранение в целом) с вопросом, как он собирался с этим работать.

Читать полностью…

pgsql – PostgreSQL

Об этом коллега выше пояснил, почему.

Читать полностью…

pgsql – PostgreSQL

А по мне так сейчас всё правильно. В результате вы видите значение timestamptz в локальном формате вашего "клиента" — который тоже со смещением +3.

Читать полностью…
Subscribe to a channel