Oracle SQL:获取给定日期的时区

Dev*_*kar 3 sql oracle timezone datetime date

如何根据以下信息准确确定给定日期(DATE data_type 列)的时区?

a) DATE 列不存储时区信息。

b) 服务器时区是 EST 或 EDT,具体取决于日期光节约是否生效

c) 可以通过 SQL 轻松获取当前时区偏移量:

SELECT TO_CHAR(SYSTIMESTAMP,'TZH:TZM') FROM DUAL

假设今天(2014 年 11 月 3 日)的时区是 EST,我们如何以编程方式确定给定日期(例如 21-Oct-2014)的有效时区(即 EST 或 EDT)?

Mat*_*int 6

Oracle 支持IANA 时区。美国东部时区由 表示"America/New_York"

您可以使用从值FROM_TZ创建一个。(如果你从那时开始,你应该首先投射到.)TIMESTAMP WITH TIME ZONETIMESTAMPDATETIMESTAMP

然后您可以使用TO_CHARwith'TZH:TZM'获取偏移量,或使用 with'TZD'获取缩写(例如 EST 或 EDT)。

例如:

SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2014-11-02 00:00:00', 'America/New_York'),'TZD')
FROM DUAL;  -- Output: 'EDT'

SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2014-11-02 00:00:00', 'America/New_York'),'TZH:TZM')
FROM DUAL;  -- Output: '-04:00'

SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2014-11-03 00:00:00', 'America/New_York'),'TZD')
FROM DUAL;  -- Output: 'EST'

SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2014-11-03 00:00:00', 'America/New_York'),'TZH:TZM')
FROM DUAL;  -- Output: '-05:00'
Run Code Online (Sandbox Code Playgroud)