我的psql数据库中存储的日期格式为DD/MM/YYYY HH24:MI TZ
(带时区的日期时间)。我需要将此日期转换为时间戳。
我尝试了to_timestamp()但它没有使用timezone。
ERROR: "TZ"/"tz"/"OF" format patterns are not supported in to_date
我尝试了:: timestamptz,但它认为日期格式为MM/DD/YYYY HH24:MI TZ
ERROR: date/time field value out of range
有没有办法将格式从DD/MM/YYYY HH24:MI TZ
转换为MM/DD/YYYY HH24:MI TZ
或将DD/MM/YYYY HH24:MI TZ
转换为时间戳?
e.g。 “2017/04/28 13:00 +2:30”
答案 0 :(得分:1)
尝试直接投射?..
so=# select to_timestamp('04/28/2017 13:00 +2:30','D/MM/YYYY HH24:MI TZ');
ERROR: "TZ"/"tz"/"OF" format patterns are not supported in to_date
Time: 20.850 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
timestamptz
------------------------
2017-04-28 10:30:00+00
(1 row)
Time: 0.554 ms
https://www.postgresql.org/docs/current/static/functions-formatting.html
存在to_timestamp和to_date来处理不能的输入格式 通过简单的铸造转换。对于大多数标准日期/时间格式, 只需将源字符串转换为所需的数据类型即可 更容易。
<强>更新强>
关于您的评论,您只需调整datestyle
即可更改解析:
so=# set datestyle to DMY;
SET
Time: 9.997 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
ERROR: date/time field value out of range: "04/28/2017 13:00 +2:30"
LINE 1: select '04/28/2017 13:00 +2:30'::timestamptz;
^
HINT: Perhaps you need a different "datestyle" setting.
Time: 10.217 ms
so=# set datestyle to MDY;
SET
Time: 8.799 ms
so=# select '04/28/2017 13:00 +2:30'::timestamptz;
timestamptz
------------------------
2017-04-28 10:30:00+00
(1 row)