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)?
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)