如何根据以下信息准确确定给定日期(DATE data_type 列)的时区?
a) DATE 列不存储时区信息。
b) 服务器时区是 EST 或 EDT,具体取决于 date light saving 是否生效
c) 当前时区偏移量可以通过 SQL 轻松获取:
SELECT TO_CHAR(SYSTIMESTAMP,'TZH:TZM') FROM DUAL
假设今天(2014 年 11 月 3 日)的时区是 EST,我们如何以编程方式确定给定日期(例如 2014 年 11 月 21 日)的有效时区(即 EST 或 EDT)?
最佳答案
Oracle 支持 IANA time zones .美国东部时区由 “America/New_York”
表示。
您可以使用 FROM_TZ
从 TIMESTAMP
值创建一个 TIMESTAMP WITH TIME ZONE
。 (如果您从 DATE
开始,那么您应该首先转换为 TIMESTAMP
。)
然后您可以将 TO_CHAR
与 'TZH:TZM'
一起使用以获得偏移量,或与 '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'
关于sql - 甲骨文 SQL : get timezone for a given date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717247/