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)
我参考了 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)