如何查找当前时区 EST 或 EDT
Posted
技术标签:
【中文标题】如何查找当前时区 EST 或 EDT【英文标题】:How to find current timezone EST or EDT 【发布时间】:2019-04-25 03:45:05 【问题描述】:Postgresql...如何找到当前时区 EST 或 EDT,我正在做但是期待一个适用于所有时区的简单解决方案。,
确切要求:如果我将 ET 作为本地时区,我需要当前时区和日光。
SELECT
(CASE WHEN ((CURRENT_TIMESTAMP AT TIME ZONE 'America/New_York') - CURRENT_TIMESTAMP = '-04:00:00') then 'EDT'
WHEN ((CURRENT_TIMESTAMP AT TIME ZONE 'America/New_York') - CURRENT_TIMESTAMP = '-05:00:00') then 'EST'
ELSE ('OTH') END)
以下是我为此目的使用的功能:
CREATE OR REPLACE FUNCTION public.time_zone_tz_abbriv (
abbriv text
)
RETURNS text AS
$body$
SELECT
CASE WHEN 'ET' = $1 THEN (CASE WHEN ((CURRENT_TIMESTAMP AT TIME ZONE 'America/New_York') - CURRENT_TIMESTAMP) = '04:00:00' then 'EDT'
WHEN (CURRENT_TIMESTAMP - (CURRENT_TIMESTAMP AT TIME ZONE 'America/New_York')) = '05:00:00' then 'EST' END)
WHEN 'MT' = $1 THEN (CASE WHEN ((CURRENT_TIMESTAMP AT TIME ZONE 'America/Edmonton') - CURRENT_TIMESTAMP) = '06:00:00' then 'MDT'
WHEN (CURRENT_TIMESTAMP - (CURRENT_TIMESTAMP AT TIME ZONE 'America/Edmonton')) = '07:00:00' then 'MST' END)
WHEN 'PT' = $1 THEN (CASE WHEN ((CURRENT_TIMESTAMP AT TIME ZONE 'America/Los_Angeles') - CURRENT_TIMESTAMP) = '07:00:00' then 'PDT'
WHEN (CURRENT_TIMESTAMP - (CURRENT_TIMESTAMP AT TIME ZONE 'America/Los_Angeles')) = '08:00:00' then 'PST' END)
WHEN 'CT' = $1 THEN (CASE WHEN ((CURRENT_TIMESTAMP AT TIME ZONE 'America/Mexico_City') - CURRENT_TIMESTAMP) = '05:00:00' then 'CDT'
WHEN (CURRENT_TIMESTAMP - (CURRENT_TIMESTAMP AT TIME ZONE 'America/Mexico_City')) = '06:00:00' then 'CST' END)
END
$body$
LANGUAGE 'sql'
IMMUTABLE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
COST 100;
以下是用法
SELECT TIME_ZONE_TZ_ABBRIV('ET');
Ans: EST or EDT
SELECT TIME_ZONE_TZ_ABBRIV('PT');
Ans: PST or PDT
SELECT TIME_ZONE_TZ_ABBRIV('MT');
Ans: MST or MDT
SELECT TIME_ZONE_TZ_ABBRIV('CT');
Ans: CST or CDT
【问题讨论】:
【参考方案1】:只要您的要求确实是时区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')
【讨论】:
它会在夏令时自动更改吗..? 是的:我的笔记本电脑上的 postgresql 11 甚至不需要重新启动来更改结果。我不知道它是否取决于 ini 文件中的参数,所以如果您可以更改服务器的日期,我建议您尝试一下。以上是关于如何查找当前时区 EST 或 EDT的主要内容,如果未能解决你的问题,请参考以下文章