我有一个 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 值不再有效。有人可以为我提供一些指示,我该如何解决这个问题?