我运行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”。
我正在使用的数据库无法修改,我不能修改数据的存储方式。
答案 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标准委员会在设计时吸烟是什么,我都不会想要在它附近的任何地方吸烟。