3

我有一个在 GMT 中存储时间的应用程序,但与具有 Olsen tz 名称(如“美国/纽约”)的机场相关联。

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

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

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

在时区 'GMT' 选择 cast (mydate as timestamp) 作为 mydateZ, from_tz(cast (mydate as timestamp),'GMT') 在时区 myzoneName 作为 mydateLocal

4

1 回答 1

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”),则日期在夏令时范围内。日期和时区可以是查询的参数。

于 2010-11-08T12:45:20.710 回答