Возможно ли получить правильное обозначение TZ после конвертирующая колонка типа timestamptz
?Получить TZ аббревиатуру для данной метки времени и названия TZ
То, что я после этого, соф примеру, для отображения "2016-06-16 16: 00: 00-04" в "США/Тихого океана" часовой пояс с целевой TZ сокращениях. я могу получить это легко:
06/16/2016 01:00 pm
Но я не могу получить следующее:
06/16/2016 01:00 pm PDT
После преобразования timestamptz
становится timestamp without timezone
и to_char
спецификатор 'TZ' становится бессмысленным ...
Здесь пример того, что я пробовал:
SELECT
scheduled_dt AS scheduled_dt
, to_char(scheduled_dt, 'TZ') AS scheduled_dt_orig_tz
-- correct value, but missing TZ
, timezone('US/Pacific', scheduled_dt) AS schedules_dt_converted_tz
, to_char(timezone('US/Pacific', scheduled_dt), 'MM/DD/YYYY HH:MI pm') AS scheduled_dt_converted_tz_localized
-- after conversion TZ is lost
, to_char(timezone('US/Pacific', scheduled_dt), 'MM/DD/YYYY HH:MI pm TZ') AS scheduled_dt_converted_tz_localized_missing_tz
-- with cast, wrong TZ is displayed
, to_char(timezone('US/Pacific', scheduled_dt)::timestamptz, 'MM/DD/YYYY HH:MI pm TZ') AS scheduled_dt_converted_tz_localized_wrong_tz
FROM orders
LIMIT 5
и пример вывода:
"scheduled_dt","scheduled_dt_orig_tz","schedules_dt_converted_tz","scheduled_dt_converted_tz_localized","scheduled_dt_converted_tz_localized_missing_tz","scheduled_dt_converted_tz_localized_wrong_tz"
"2016-06-16 16:00:00-04","EDT","2016-06-16 13:00:00","06/16/2016 01:00 pm","06/16/2016 01:00 pm ","06/16/2016 01:00 pm EDT"
"2014-07-15 08:00:00-04","EDT","2014-07-15 05:00:00","07/15/2014 05:00 am","07/15/2014 05:00 am ","07/15/2014 05:00 am EDT"
"2012-11-27 10:15:00-05","EST","2012-11-27 07:15:00","11/27/2012 07:15 am","11/27/2012 07:15 am ","11/27/2012 07:15 am EST"
"2011-03-02 08:30:00-05","EST","2011-03-02 05:30:00","03/02/2011 05:30 am","03/02/2011 05:30 am ","03/02/2011 05:30 am EST"
"2016-02-12 14:23:09-05","EST","2016-02-12 11:23:09","02/12/2016 11:23 am","02/12/2016 11:23 am ","02/12/2016 11:23 am EST"
Я хранение целевой TZ с полным именем, хранящийся в присоединении к таблице (warehouse_locations), так что я могу скрытой каждую строку. То, что мне не хватает, это «текстовая библиотека.», Которая может форматировать временную метку с коротким названием TZ с учетом DST .... Поэтому я могу получить «PDT» или «PST» на основе конкретной даты и часового пояса. ... Я уже делаю это в коде, но задавался вопросом, можно ли сделать это непосредственно в PG – zam6ak
@ zam6ak: я бы лично избегал делать это в базе данных, даже если бы мог. Я передал бы его независимо от того, что код говорит с базой данных *, как временная метка и отдельный часовой пояс * и там строковое форматирование. Вы, как правило, находитесь в гораздо лучшем положении для форматирования с богатой информацией о культуре и т. Д. –
Я абсолютно согласен. Однако объем данных в моем случае значителен (500K и более строк). Поэтому я пытался избежать шага «перевода» (по существу, цикла в коде, где каждый столбец временной метки преобразуется) ради получения скорости ... – zam6ak