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

时间:2014-11-03 15:19:57

标签: sql oracle date datetime timezone

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

您可以使用FROM_TZTIMESTAMP WITH TIME ZONE值创建TIMESTAMP。 (如果您从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'
相关问题