PostgreSQL конвертирует дату с часовым поясом в метку времени - PullRequest
0 голосов
/ 03 мая 2018

У меня дата хранится в формате DD/MM/YYYY HH24:MI TZ (дата-время с часовым поясом) в моей базе данных psql. Мне нужно преобразовать эту дату в метку времени.

Я пытался to_timestamp (), но он не работает с часовым поясом.

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 в метку времени?

например. "28/04/2017 13:00 +2: 30"

1 Ответ

0 голосов
/ 03 мая 2018

попробуйте кастовать напрямую? ..

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)
...