Oracle时区转换

时间:2018-09-06 21:13:11

标签: oracle timezone

我正在使用内置的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。转换正确发生。只是想确保它会在夏令时发生。

谢谢。

2 个答案:

答案 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错误的情况下使用缩写。