如何查找当前时区EST或EDT

时间:2018-11-22 12:41:15

标签: postgresql dst edt

Postgresql ...如何找到当前时区EST或EDT,我正在这样做,但是期望为所有时区提供一个简单的解决方案。

-

确切的要求:如果我将ET设置为本地时区,则需要带夏令时的当前时区。

- 选择 (当(((时区“ CURRENT_TIMESTAMP”在美国/纽约州”)-CURRENT_TIMESTAMP ='-04:00:00')然后是“ EDT”时 何时(((CURRENT_TIMESTAMP AT TIME ZONE'America / New_York')-CURRENT_TIMESTAMP ='-05:00:00')然后是'EST'

ELSE('OTH')END)

-

以下是我用于此目的的功能:

-

创建或替换功能public.time_zone_tz_abbriv(   文字 ) 以AS形式返回文字 $ body $ 选择 'ET'= $ 1时的情况(然后(((CURRENT_TIMESTAMP AT TIME ZONE'America / New_York')-CURRENT_TIMESTAMP')= '04:00:00'then'EDT'                                当(CURRENT_TIMESTAMP-(CURRENT_TIMESTAMP AT TIME ZONE'America / New_York'))= '05:00:00'然后'EST'END) 当'MT'= $ 1然后(例如(((CURRENT_TIMESTAMP AT TIME ZONE'America / Edmonton')-CURRENT_TIMESTAMP)= '06:00:00'然后是'MDT'                           当(CURRENT_TIMESTAMP-(CURRENT_TIMESTAMP AT TIME ZONE'America / Edmonton'))= '07:00:00'然后'MST'END) 当'PT'= $ 1时(在这种情况下(((CURRENT_TIMESTAMP AT TIME ZONE'America / Los_Angeles')-CURRENT_TIMESTAMP)= '07:00:00'然后是'PDT'                           当(CURRENT_TIMESTAMP-(CURRENT_TIMESTAMP AT TIME ZONE'America / Los_Angeles'))= '08:00:00'然后'PST'END) 当'CT'= $ 1时(例如(((CURRENT_TIMESTAMP AT TIME ZONE'America / Mexico_City')-CURRENT_TIMESTAMP)= '05:00:00'然后是'CDT'                           当(CURRENT_TIMESTAMP-(CURRENT_TIMESTAMP AT TIME ZONE'America / Mexico_City')= '06:00:00'然后'CST'END) 结束 $ body $ 语言'sql' 不可变的 NULL输入返回NULL 安全调用者

费用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 :(得分:1)

只要您的要求确实是时区EDT/ESTMDT/MST,并且对于 current 时间戳,您可以使用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')