如何根据以下信息准确确定给定日期(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)?
答案 0 :(得分:3)
Oracle支持IANA time zones。美国东部时区由"America/New_York"
表示。
您可以使用FROM_TZ
从TIMESTAMP 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'