使用时区指定日期/时间格式

时间:2013-10-16 21:08:46

标签: oracle plsql

是否可以按以下格式显示sysdate?

Wed Oct 16 15:04:44 MDT 2013

这是unix日期格式。

echo `date`

编辑:最新版本缺少时区信息。此外,我不确定这是否是最优雅的解决方案:

SELECT TO_CHAR (sysdate, 'DY') || ' ' || to_char(sysdate, 'MON DD') || ' ' ||     to_char(sysdate, 'HH24:MM:SS' ) || ' ' || to_char(sysdate, 'YYYY' )  
FROM DUAL ; 

1 个答案:

答案 0 :(得分:3)

sysdate返回date数据类型的值,该值不包含有关时区的信息。为了能够显示时区区域的缩写版本,您需要对具有时区数据类型的时间戳值进行操作,并在日期时间格式掩码中使用TZD格式元素:

select to_char( cast(sysdate as timestamp with local time zone)
              , 'Dy Mon dd hh24:mi:ss TZD yyyy') as res
 from dual

结果:

RES                           
-------------------------------
Thu Oct 17 02:14:00 PDT 2013   

修改

  

10月16日星期三:12:0 2013年是我得到的

尝试明确指定会话的准确时区区域。因为可能有多个时区区域与一个偏移相关联,而oracle将无法选择一个并返回null。所以在执行查询之前执行alter session set time_zone='<<specify_exact_time_zone_region>>'。例如:

SQL> alter session set time_zone='Canada/Mountain';

Session altered.

SQL> select to_char( cast(sysdate as timestamp with local time zone)
  2                    , 'Dy Mon dd hh24:mi:ss TZD yyyy') as res
  3       from dual;

RES                                                                             
-------------------------------                                                 
Thu Oct 17 02:51:14 MDT 2013