Oracle如何将UTC时间转换为本地时间(缺少偏移信息)

Max*_*lah 4 sql oracle

我有一个包含日期列的表.我认为该列中的日期以UTC格式保存.

我想在检索日期时以当地时间打印.这意味着当我从德国调用日期时,结果应该是这样的:

2015-04-29 11:24:06 +0200UTC EUROPE/BERLIN
Run Code Online (Sandbox Code Playgroud)

我尝试了以下sql:

SELECT TO_CHAR(CAST(dateColum as  TIMESTAMP WITH LOCAL TIME ZONE), 'YYYY-MM-DD HH24:MI:SS TZR') from myTable;
Run Code Online (Sandbox Code Playgroud)

结果如下:

2015-04-29 11:24:06 EUROPE/BERLIN
Run Code Online (Sandbox Code Playgroud)

缺少+/-偏移量.

任何的想法?

MT0*_*MT0 10

Oracle安装程序:

CREATE TABLE table_name ( value ) AS
SELECT DATE '2016-07-13' FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT TO_CHAR(
         FROM_TZ( CAST( value AS TIMESTAMP ), 'UTC' )
           AT TIME ZONE 'EUROPE/BERLIN',
         'YYYY-MM-DD HH24:MI:SS TZH:TZM TZR'
       ) AS berlin_time
FROM   table_name;
Run Code Online (Sandbox Code Playgroud)

输出:

BERLIN_TIME
----------------------------------------
2016-07-13 02:00:00 +02:00 EUROPE/BERLIN
Run Code Online (Sandbox Code Playgroud)

查询2:

SELECT TO_CHAR(
         FROM_TZ( CAST( value AS TIMESTAMP ), 'UTC' ) AT LOCAL,
         'YYYY-MM-DD HH24:MI:SS TZH:TZM TZR'
       ) AS local_time
FROM   table_name;
Run Code Online (Sandbox Code Playgroud)

输出:

LOCAL_TIME
----------------------------------------
2016-07-13 02:00:00 +02:00 EUROPE/BERLIN
Run Code Online (Sandbox Code Playgroud)

  • @Max_Salah 使用`AT LOCAL`而不是`AT TIME ZONE ...`。 (3认同)
  • 您可以使用 TO_CHAR( SYSTIMESTAMP, 'TZR' ) 来获取系统的时区区域并将其用作 FROM_TZ() 的参数。 (2认同)