在我的函数中,我想将时间从 GMT 转换为 BST。我的查询如下
SELECT TO_CHAR(NEW_TIME ((TRUNC(SYSDATE) + 20/24 + 21/1440),
'GMT',
'BST'),
'HH24:MI'
)
FROM DUAL;
它返回我'9:21'而不是'21:21'。请帮忙!谢谢!
从文档中,BST 指的是白令标准时间,而不是您所期望的英国夏令时间。 白令标准时间为 UTC-11,因此您得到的结果符合预期。
NEW_TIME 函数只能接受上述文档中指定的有限时区。如果要将 GMT 转换为英国夏令时,您可能应该使用“欧洲/伦敦”时区。
select (cast(your_date as timestamp) at time zone 'GMT') at time zone 'Europe/London'
from dual;
所以你的查询将是,
SQL> select
(cast((TRUNC(SYSDATE) + 20/24 + 21/1440) as timestamp) at time zone 'GMT') at time zone 'Europe/London',
to_char((cast((TRUNC(SYSDATE) + 20/24 + 21/1440) as timestamp) at time zone 'GMT') at time zone 'Europe/London','hh24:mi')
from dual;
(CAST((TRUNC(SYSDATE)+20/24+21/1440)ASTIMESTAMP)ATTIMEZONE'GMT')ATTIMEZONE' TO_CH
--------------------------------------------------------------------------- -----
14-MAY-14 09.21.00.000000 PM EUROPE/LONDON 21:21