我正在使用内置的oracle函数from_tz进行时区转换。有谁知道它是否考虑了夏令时更改?
to_char(from_tz(CAST(enteredondtm AS TIMESTAMP),'UTC')
AT TIME ZONE 'PST','YYYY-MM-DD') entered_on_date .
在此功能中,enterontm以UTC表示,并通过此功能转换为PST。转换正确发生。只是想确保它会在夏令时发生。
谢谢。
答案 0 :(得分:1)
是的,它将考虑DST。
要说服自己,请在公式中用date '2018-02-01'
替换列名enteredondtm
,然后查看得到的结果(不过,请使用完整格式的TO_CHAR模型来查看时间,而不仅仅是日期)。您将看到输出是前一天的16:00小时。然后将其更改为date '2018-08-01'
,您会看到结果是前一天的17:00小时。
date
日期文字的午夜是一天中的时间。在标准时间,太平洋时区比世界标准时间晚8个小时;在DST期间,比现在晚了七个小时。
答案 1 :(得分:0)
是的,简单的证明:
SELECT
TIMESTAMP '2018-06-01 00:00:00 PST',
TIMESTAMP '2018-12-01 00:00:00 PST'
from dual;
01.06.2018 00:00:00 -07:00 01.12.2018 00:00:00 -08:00
但是,如果您的输出为YYYY-MM-DD
,即不包含任何时间,为什么还要担心夏令时?
请注意,时区PST
可能会模棱两可,请参见
SELECT TZABBREV, TZ_OFFSET(TZNAME), TZNAME
FROM V$TIMEZONE_NAMES
WHERE TZABBREV = 'PST';
TZABBREV TZ_OFFSET(TZNAME) TZNAME
========================================
PST -05:00 America/Bahia_Banderas
PST -06:00 America/Mazatlan
PST -06:00 America/Boise
PST -06:00 Mexico/BajaSur
PST -06:00 America/Inuvik
PST -07:00 America/Los_Angeles
PST -07:00 America/Hermosillo
PST -07:00 America/Ensenada
PST -07:00 America/Dawson_Creek
PST -07:00 America/Dawson
PST -07:00 America/Creston
PST -07:00 America/Santa_Isabel
PST -07:00 US/Pacific
PST -07:00 PST8PDT
PST -07:00 PST
PST -07:00 US/Pacific-New
PST -07:00 America/Tijuana
PST -07:00 America/Vancouver
PST -07:00 America/Whitehorse
PST -07:00 Canada/Pacific
PST -07:00 Canada/Yukon
PST -07:00 Mexico/BajaNorte
PST -08:00 America/Juneau
PST -08:00 America/Sitka
PST -08:00 Pacific/Pitcairn
PST -08:00 America/Metlakatla
最好使用“真实的”长名称。仅有几个时区(请参阅SELECT * FROM V$TIMEZONE_NAMES WHERE TZABBREV = TZNAME
),您可以在不出现ORA-01882: timezone region not found
错误的情况下使用缩写。