Musisz dodatkowo zapisać przesunięcie strefy czasowej do timestamp
.
Jak już wyjaśnił @Milen (i link do podręcznik
):timestamp
zapisuje tylko punkt w czasie (jako wartość abstrakcyjną). Modyfikator strefy czasowej nie zapisane, służy tylko do dostosowania timestamp
względem UTC
.
Rozważ następującą prezentację:
-- DROP TABLE tbl;
CREATE TEMP TABLE tbl (id int, myts timestamptz, mytz interval);
INSERT INTO tbl VALUES
(1, now() , EXTRACT (timezone from now()) * interval '1s')
,(2, '2012-01-01 00:00-05', interval '-5h')
,(3, '2012-01-01 00:00+04', interval '4h')
,(4, '2012-11-11 20:30+03', interval '3h');
SELECT *
,(myts AT TIME ZONE mytz)::text
|| CASE WHEN mytz > '0:0' THEN '+' ELSE '' END
|| to_char(mytz, 'FMHH24:mi') AS timestamp_at_origin
FROM tbl;
Uruchom go lokalnie, aby zobaczyć. Zwróć szczególną uwagę na szczegóły W STREFIE CZASOWEJ
i jak wyodrębnić strefę czasową z (lokalnego!) timestamp with time zone
.now()
zwraca timestamp with time zone
lub timestamp
w skrócie.
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
wyświetla znacznik czasu ze strefą czasową widzianą na początku. Jeśli zrozumiałem Twoje pytanie, to właśnie tego szukasz.
Możesz jeszcze bardziej poprawić formatowanie.
Być może zainteresuje Cię to powiązane pytanie co rzuca trochę światła na niejasności i pułapki stref czasowych.