[英]Oracle SQL: get timezone for a given date
How can the timezone be determined accurately for a given date (DATE data_type column) based on the following information? 如何根据以下信息准确确定给定日期(DATE data_type列)的时区?
a) DATE columns do not store timezone information. a)DATE列不存储时区信息。
b) Server timezone is either EST or EDT depending on whether date light saving is in effect or not b)服务器时区是EST或EDT,具体取决于日期光节省是否有效
c) The current timezone offset can be easily fetched by SQL: c)SQL可以轻松获取当前时区偏移量:
SELECT TO_CHAR(SYSTIMESTAMP,'TZH:TZM') FROM DUAL
Assuming that timezone for today (3-Nov-2014) is EST, how can we determine what was the timezone in effect (ie EST or EDT) for a given date (eg 21-Oct-2014) programatically? 假设今天(2014年11月3日)的时区是EST,我们如何以编程方式确定给定日期(例如2014年10月21日)的有效时区(即EST或EDT)?
Oracle has support for IANA time zones . Oracle支持IANA时区 。 The US Eastern time zones is represented by
"America/New_York"
. 美国东部时区由
"America/New_York"
代表。
You can use FROM_TZ
to create a TIMESTAMP WITH TIME ZONE
from a TIMESTAMP
value. 您可以使用
FROM_TZ
从TIMESTAMP
值创建TIMESTAMP WITH TIME ZONE
。 (If you're starting from DATE
then you should first cast to TIMESTAMP
.) (如果你是从
DATE
开始那么你应该先投射到TIMESTAMP
。)
Then you can use TO_CHAR
with either 'TZH:TZM'
to get an offset, or with 'TZD'
to get an abbreviation (such as EST or EDT). 然后你可以使用
TO_CHAR
和'TZH:TZM'
来获得偏移,或者使用'TZD'
来获得缩写(例如EST或EDT)。
For example: 例如:
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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.