Ngoài ra, bạn phải lưu chênh lệch múi giờ đến timestamp
.
Như @Milen đã giải thích (và được liên kết với hướng dẫn sử dụng
):một timestamp
chỉ lưu một điểm trong thời gian (dưới dạng giá trị trừu tượng). Công cụ sửa đổi múi giờ không được lưu, nó chỉ dùng để điều chỉnh timestamp
liên quan đến UTC
.
Hãy xem xét bản trình diễn sau:
-- 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;
Chạy nó cục bộ để xem. Đặc biệt chú ý đến các chi tiết của timestamp with time zone
.
now()
trả về timestamp with time zone
hoặc timestamptz
gọi tắt.
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
hiển thị dấu thời gian với múi giờ như được thấy ở gốc của nó. Nếu tôi hiểu câu hỏi của bạn, thì đó là những gì bạn đang tìm kiếm.
Bạn có thể cải thiện thêm định dạng.
Bạn có thể quan tâm đến câu hỏi liên quan này điều này làm sáng tỏ sự mơ hồ và cạm bẫy của múi giờ.