在PostgreSQL 8.3中以本地时间转换UTC时间

时间:2014-01-20 15:34:10

标签: postgresql

我运行Postgres 8.3数据库,其中时间似乎以UTC存储,没有时区。 我试图在当地时间显示,但没有'+01'后缀:

选择scheduled_start_ts,我得到: 2014-01-20 05:01:35.663

在时区'MET'选择scheduled_start_ts: 2014-01-20 05:01:35.663 + 01

我想获得当地时间的“2014-01-20 06:01:35.663”。

我正在使用的数据库无法修改,我不能修改数据的存储方式。

1 个答案:

答案 0 :(得分:1)

如果要格式化时间,请使用to_char功能。请参阅文档中的formatting functions

regress=> SELECT to_char( 
   (TIMESTAMP '2014-01-20 05:01:35.663' AT TIME ZONE 'UTC') 
   AT TIME ZONE 'MET',
   'YYYY-MM-DD HH:MI:SS'
   );

       to_char       
---------------------
 2014-01-20 06:01:35
(1 row)

(TIMESTAMP 'xxx' AT TIME ZONE 'UTC')通过重新解释 timestamptz为UTC时,为TIMESTAMP提供正确的时间。第二个AT TIME STAMP代替将时间戳转换为时区timestamp MET。然后将其格式化。

无论SQL标准委员会在设计时吸烟是什么,我都不会想要在它附近的任何地方吸烟。