Sie können mit den GUC-Parametern datestyle
spielen und timezone
innerhalb einer Funktion, um zu bekommen, was Sie wollen. Hier ist ein Beispiel (es gibt jedoch Mikrosekunden zurück, also müssen Sie es wahrscheinlich ein wenig optimieren):
create or replace function timestamp_iso8601(ts timestamptz, tz text) returns text as $$
declare
res text;
begin
set datestyle = 'ISO';
perform set_config('timezone', tz, true);
res := ts::timestamptz(3)::text;
reset datestyle;
reset timezone;
return replace(res, ' ', 'T') || ':00';
end;
$$ language plpgsql volatile;
Ergebnisse:
test=# select timestamp_iso8601(now()::timestamptz, 'Europe/Moscow');
timestamp_iso8601
-------------------------------
2017-07-12T08:56:58.692985+03:00
test=# select timestamp_iso8601(now()::timestamptz, 'Pacific/Auckland');
timestamp_iso8601
-------------------------------
2017-07-12T17:59:05.863483+12:00
(1 row)
Aktualisierung:bearbeitet. Sie können timestamptz(3)
verwenden , wobei die Präzision angegeben wird (Standardmäßig werden Mikrosekunden verwendet, während 3
hält nur Millisekunden). Alternativ können Sie res := to_char(ts::timestamptz, 'IYYY-MM-DDT HH24:MI:SS:MSOF');
verwenden statt ::timestamptz(3)::text
Conversion-Kette, und in diesem Fall (3)
wird nicht benötigt.