如何根据以下信息准确确定给定日期(date data_type列)的时区?
a) DATE列不存储时区信息
b) 服务器时区为EST或EDT,具体取决于日期灯保存是否有效
c) SQL可以很容易地获取当前时区偏移:
SELECT TO_CHAR(SYSTIMESTAMP,'TZH:TZM') FROM DUAL
假设今天(2014年11月3日)的时区是美国东部时间,我们如何通过程序确定给定日期(如2014年10月21日)的有效时区(即美国东部时间或美国东部时间)?
Oracle支持IANA时区。美国东部时区由"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'