2015-01-29 2 views
1

Есть ли способ правильно преобразовать строку rfc3339 в столбце character varying в timestamp with timezone?Преобразование строки rfc3339 в метку времени с часовым поясом

Input: "2015-01-28T17:41:52Z" 
Expected output: "2015-01-28 17:41:52+00" 
Current output: "2015-01-28 17:41:52+01" 

Я попытался следующие

/* begin dummy data */ 
WITH messages as (
    select 123 as id, '2015-01-28T17:41:52Z'::text as received 
) 
/* end dummy data */ 
SELECT id, received, (to_timestamp(received, 'YYYY-MM-DDThh24:MI:SS')) as d 
FROM messages 

Добавление TZ или tz невозможно для входных данных и OFis available in 9.4 но not in 9.3.

+0

rfc3339 - это просто профиль iso8601 - PostregreSQL принимает любой действительный вход iso8601 как 'date' /' timestamp'/'timestamp с часовым поясом'. (попробуйте лить ''2015-01-28T17: 41: 52Z' :: timestamptz') – pozs

+0

Отлично, спасибо. Я приму это в ответ, если вы не возражаете. –

ответ

2

RFC3339 просто профиль ISO 8601.

PostregreSQL accepts any valid ISO 8601 input, как date/timestamp/timestamp with time zone. Попробуйте литья, как:

SELECT '2015-01-28T17:41:52Z'::timestamptz 

Примечание: однако, ваш выход (в клиенте) всегда будет в вашем current time zone.

Смежные вопросы