Как найти текущий часовой пояс EST или EDT - PullRequest
0 голосов
/ 22 ноября 2018

Postgresql ... Как найти текущий часовой пояс EST или EDT, я делаю это, но ожидаю простого решения для всех часовых поясов.,

-

Точные требования: если я дал ETкак местный часовой пояс, мне нужен текущий часовой пояс с дневным светом.

- ВЫБРАТЬ (СЛУЧАЙ КОГДА ((CURRENT_TIMESTAMP AT TIME ZONE 'America / New_York') - CURRENT_TIMESTAMP = '-04: 00: 00'), затем "EDT" WHEN((CURRENT_TIMESTAMP в зоне времени «Америка / Нью-Йорк») - CURRENT_TIMESTAMP = '-05: 00: 00'), затем «EST»

ELSE («OTH») END)

-

СЛЕДУЮЩАЯ ФУНКЦИЯ, которую Я ИСПОЛЬЗУЮ ДЛЯ ЭТОЙ ЦЕЛИ:

-

СОЗДАНИЕ ИЛИ ЗАМЕНА ФУНКЦИИ public.time_zone_tz_abbriv (сокращенный текст) ВОЗВРАЩАЕТ текст КАК $ body $ ВЫБРАТЬ СЛУЧАЙ, КОГДА 'ET '= $ 1 THEN (CASE WHEN ((CURRENT_TIMESTAMP в зоне времени' America / New_York ') - CURRENT_TIMESTAMP) = '04: 00: 00' затем 'EDT' WHEN (CURRENT_TIMESTAMP - (CURRENT_TIMESTAMP AT ZONE '' Америка / New_York)) = '05: 00: 00 ', затем' EST 'END) WHEN' MT '= $ 1 THEN (CASE WHEN ((CURRENT_TIMESTAMP В ЗОНЕ ВРЕМЕНИ «Америка / Эдмонтон») - CURRENT_TIMESTAMP) = '06: 00: 00 ', затем «MDT», КОГДА (CURRENT_TIMESTAMP - (CURRENT_TIMESTAMP в ВРЕМЕННОЙ ЗОНЕ «Америка / Эдмонтон»)) = '07: 00: 00' тогда'MST' END) WHEN 'PT' = $ 1 THEN (CASE WHEN ((CURRENT_TIMESTAMP в зоне времени 'America / Los_Angeles') - CURRENT_TIMESTAMP) = '07: 00: 00 'затем' PDT 'WHEN (CURRENT_TIMESTAMP - (CURRENT_TIMEST)ZONE 'America / Los_Angeles')) = '08: 00: 00 ', затем' PST 'END) КОГДА' CT '= ТОЛЬКО 1 $ (СЛУЧАЙ КОГДА ((CURRENT_TIMESTAMP AT TIME ZONE' 'America / Mexico_City') - CURRENT_TIMESTAMP) = '05: 00: 00 'then' CDT 'КОГДА (CURRENT_TIMESTAMP - (CURRENT_TIMESTAMP AT ZONE' America / Mexico_City ')) = '06: 00: 00' then 'CST' END) END $ body $ LANGUAGE 'sql' НЕМНОГО ВОЗВРАЩАЕТСЯ ВОЗВРАЩАЕТСЯ НУЛЬON NULL INVITER SECURITY INVOKER

СТОИМОСТЬ 100;

-

СЛЕДУЮЩАЯ ИСПОЛЬЗУЕТСЯ

SELECT TIME_ZONE_TZ_ABBRIV ('ET');Ответ: EST или EDT SELECT TIME_ZONE_TZ_ABBRIV ('PT');Ответ: PST или PDT SELECT TIME_ZONE_TZ_ABBRIV ('MT');Ответ: MST или MDT SELECT TIME_ZONE_TZ_ABBRIV ('CT');Ответ: CST или CDT

1 Ответ

0 голосов
/ 25 ноября 2018

Пока ваше требование действительно является часовым поясом EDT/EST, MDT/MST и, таким образом, для текущей отметки времени, вы можете использовать pg_timezone_names.
Предполагается, что всегда будет возвращатьсяправильное сокращение на основе системных часов.

Пример:

SELECT *
FROM pg_timezone_names
WHERE Name IN ('America/Edmonton','America/New_York')

Кроме того, все сокращения приведены в pg_timezone_abbrevs независимо от даты

Пример:

SELECT *
from pg_timezone_abbrevs
WHERE Abbrev in ('EST','EDT')
...