如何查找特定的TIMESTAMP WITH TIME ZONE是否在夏令时内

时间:2010-11-01 23:03:47

标签: oracle10g dst

我有一个应用程序可以在GMT中存储时间,但与具有Olsen tz名称的机场相关联,例如“America / New York”。

我需要确定给定日期是否在当地夏令时期间。

我能找到的最接近的是TZ_OFFSET('Tzname'),但没有简单的方法来获得相对于某个日期的下一个DST开始/结束时间。

这似乎是朝着正确方向迈出的一步......

在时区'GMT'选择强制转换(mydate作为时间戳)作为mydateZ, from_tz(cast(mydate as timestamp),'GMT')在时区myzoneName为mydateLocal

1 个答案:

答案 0 :(得分:0)

考虑到类似问题,我在您的问题中写了以下问题:

select decode(to_char(from_tz(cast (sysdate as timestamp),'CET'),'TZR'),
to_char(from_tz(cast (sysdate as timestamp),'CET'),'TZD'),'N','Y') is_daylight 
from dual

一个简短的解释: 我将时区('CET')中的当前日期(sysdate)转换为时间戳,并比较时区的正常名称('TZR')和夏令时名称('TZD')。如果它们匹配,则sysdate不在夏令时内,如果它们不匹配(例如sysdate-100对于'CET'时区为'CEST'),则日期在夏令时内。 日期和时区可以是查询的参数。