当传递utc_date和timezone作为输入时,返回日期与时间

时间:2014-12-13 22:41:15

标签: oracle11g timezone timestamp-with-timezone

我有一个Oracle表,它有一个日期列(比如它的名字是start_date),它将日期存储为UTC日期。我有另一个列存储时区(如'America / Los_Angeles')。我的要求是我需要显示日期列,其时间戳对应于时区列中存储的时区。

我最初编写了一个接受utc_date和时区的函数,并返回如下日期:

return utc_date +   (SUBSTR (TZ_OFFSET (timezone), 1, 1) || '1')
           * TO_DSINTERVAL (
                   '0 '
                || SUBSTR (TZ_OFFSET (timezone), 2, 5)
                || ':00');

但我意识到了一个缺陷。它根据当前时间计算偏移量。所以它现在为Los_Angeles返回-00 08:00:00.000000。但是,如果存储在utc_date中的日期是强制执行日光的日期,则tz_offset值将不再有效。有人能给我一些指示,我该如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。我没有依赖TZ_OFFSET,而是决定做以下

return cast(from_tz(cast(utc_date as timestamp),'UTC') at time zone timezone as date);

这是我想要的日期。如果有人看到一个漏洞让我知道