new_time以12小时格式返回时间

时间:2013-10-15 15:42:13

标签: sql oracle datetime timezone

在我的功能中,我希望将时间从GMT转换为BST。 我的查询如下

SELECT TO_CHAR(NEW_TIME ((TRUNC(SYSDATE) + 20/24 + 21/1440),
                        'GMT',
                        'BST'),
               'HH24:MI'
       )
FROM DUAL;

它让我'9:21'而不是'21:21'。 请帮忙!谢谢!

1 个答案:

答案 0 :(得分:0)

documentation开始,BST指的是白令标准时间,而不是您期望的英国夏令时。 Bering Standard Time是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