如何利用PostgreSQL的UTC偏移量获得ISO格式的时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用PostgreSQL的UTC偏移量获得ISO格式的时间?相关的知识,希望对你有一定的参考价值。

在python中,我可以获得ISO格式的不同时区的时间,如下所示:

>>> import datetime
>>> import pytz
>>> datetime.datetime.now(tz=pytz.timezone('America/New_York')).isoformat()
'2019-03-15T04:01:23.919800-04:00'
>>> datetime.datetime.now(tz=pytz.timezone('Asia/Bangkok')).isoformat()
'2019-03-15T15:01:23.919800+07:00'

现在我需要以相同的格式从postgresql获取时间戳。经过一些研究,我得出的最好的是:

postgres=# set time zone 'America/New_York';
SET
postgres=# select to_json(now());
      to_json               
------------------------------------
 "2019-03-15T04:32:13.628323-04:00"

是否可以在不更改数据库会话的时区的情况下执行此操作?就像是:

postgres=# select to_json(now() at time zone 'America/New_York') NYC,
postgres-# to_json(now() at time zone 'Asia/Bangkok') Bangkok;
           nyc                |           bangkok         
------------------------------+------------------------------
 "2019-03-15T04:41:07.789954" | "2019-03-15T15:41:07.789954"

否则正确但缺少UTC偏移。

答案

这个怎么样?

SELECT current_timestamp AT TIME ZONE 'America/New_York'
       || replace('+' || to_char(current_timestamp AT TIME ZONE 'America/New_York'
                                 - current_timestamp AT TIME ZONE 'UTC',
                                'HH24:MMFM'),
                  '+-', '-');

             ?column?             
----------------------------------
 2019-03-15 05:43:38.901642-04:00
(1 row)

以上是关于如何利用PostgreSQL的UTC偏移量获得ISO格式的时间?的主要内容,如果未能解决你的问题,请参考以下文章

.NET 通过时区名称获取时区偏移量

在 Python 中获取计算机的 UTC 偏移量

如何确定服务器时区的 UTC 偏移量?

PostgreSQL 更新时区偏移量

如何显示 dst 空闲时区偏移量?

Python - 给定时间戳UTC和UTC偏移量的时区名称