Трябва да запишете допълнително отместването на часовата зона към timestamp
.
Както @Milen вече обясни (и свързан към ръководството
):timestamp
запазва само точка във времето (като абстрактна стойност). Модификаторът на часовата зона ене запазен, той служи само за коригиране на timestamp
спрямо UTC
.
Помислете за следната демонстрация:
-- 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;
Пуснете го локално, за да видите. Обърнете специално внимание на детайлите на В ЧАСОВАТА ЗОНА
конструкция и как извличам часовата зона от (локалния!) timestamp with time zone
.now()
връща timestamp with time zone
или timestamptz
за кратко.
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
показва клеймото за време с часовата зона, както се вижда в началото. Ако разбрах въпроса ви, значи това е, което търсите.
Можете допълнително да подобрите форматирането.
Може да се интересувате от този свързан въпрос което хвърля малко светлина върху неяснотите и клопките на часовите зони.