如何从 PostgreSQL 获取具有 UTC 偏移量的 ISO 格式的时间?
How to get time in ISO format with UTC offset from PostgreSQL?
在 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)
在 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)