PostgreSQL:将 MongoDB 日期格式转换为 timestamptz

PostgreSQL: Convert MongoDB date format to timestamptz

我参考了 psql documentation 并提出了这个查询。

SELECT to_timestamp('Tue Aug 30 2016 04:07:13 GMT+0530 (IST)', 'Dy MON DD YYYY HH24:MI:SS');

这个日期时间字符串 Tue Aug 30 2016 04:07:13 GMT+0530 (IST) 是我从 MongoDB printjson(createdAt).

得到的

上面的 postresql 似乎不能对所有偏移量正常工作。

我试过了

select to_timestamp('Tue Aug 30 2016 04:07:13 GMT+0530 (IST)', 'Dy MON DD YYYY HH24:MI:SS "GMT"OF "(IST)"');

但我收到此错误``错误:"TZ"/"tz"/"OF" to_date 不支持格式模式。

如何将此字符串 Tue Aug 30 2016 04:07:13 GMT+0530 (IST) 转换为 psql timestamptz 格式?

它看起来是一个丑陋的轮子,每个无法识别的偏移量都需要这样的 replace,但它确实有效。对于您的示例,请将 'GMT+0530 (IST)' 替换为 'GMT+05:30',它将被拾取:

t=# select replace('Tue Aug 30 2016 04:07:13 GMT+0530 (IST)','GMT+0530 (IST)','GMT+05:30')::timestamptz;
        replace
------------------------
 2016-08-30 09:37:13+00
(1 row)
t=# select replace('Tue Aug 30 2016 14:07:13 GMT+0530 (IST)','GMT+0530 (IST)','GMT+05:30')::timestamptz;
        replace
------------------------
 2016-08-30 19:37:13+00
(1 row)

更新:根据您的时区结果可能会令人困惑:

t=# set timezone TO 'GMT-5:30';                                          SET
t=# select replace('Tue Aug 30 2016 14:07:13 GMT+0530 (IST)','GMT+0530 (IST)','GMT+05:30')::timestamptz;
          replace
---------------------------
 2016-08-31 01:07:13+05:30
(1 row)

检查是否正确,使用:

t=# select replace('Tue Aug 30 2016 14:07:13 GMT+0530 (IST)','GMT+0530 (IST)','GMT+05:30')::timestamptz at time zone 'UTC';
      timezone
---------------------
 2016-08-30 19:37:13
(1 row)