Oracle11g 当传递utc_日期和时区作为输入时,返回带时间的日期

Oracle11g 当传递utc_日期和时区作为输入时,返回带时间的日期,oracle11g,timezone,timestamp-with-timezone,Oracle11g,Timezone,Timestamp With Timezone,我有一个Oracle表,其中有一个日期列,它的名称是start_date,它将日期存储为UTC date。我有另一个专栏,里面有一个时区,比如“美国/洛杉矶”。我的要求是,我需要显示日期列,其中的时间戳对应于时区列中存储的时区 我最初编写了一个函数,该函数接受utc_日期和时区,并返回如下日期: return utc_date + (SUBSTR (TZ_OFFSET (timezone), 1, 1) || '1') * TO_DSINTERVAL (

我有一个Oracle表,其中有一个日期列,它的名称是start_date,它将日期存储为UTC date。我有另一个专栏,里面有一个时区,比如“美国/洛杉矶”。我的要求是,我需要显示日期列,其中的时间戳对应于时区列中存储的时区

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

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

但我意识到了一个缺陷。它根据当前时间计算偏移量。现在它返回洛杉矶的-0008:00:00.000000。但是,如果utc_日期中存储的日期是实施日光的日期,则tz_偏移值不再有效。有人能给我指点一下如何解决这个问题吗?

我找到了解决问题的办法。我决定执行以下操作,而不是依赖于TZ_偏移

return cast(from_tz(cast(utc_date as timestamp),'UTC') at time zone timezone as date);
这是返回我想要的日期。如果有人看到瑕疵,请告诉我