Anda harus menyimpan offset zona waktu sebagai tambahan ke timestamp
.
Seperti yang sudah dijelaskan oleh @Milen (dan ditautkan ke manual
):sebuah timestamp
hanya menghemat satu titik waktu (sebagai nilai abstrak). Pengubah zona waktu tidak disimpan, hanya berfungsi untuk mengatur timestamp
relatif terhadap UTC
.
Pertimbangkan demo berikut:
-- 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;
Jalankan secara lokal untuk melihat. Berikan perhatian khusus pada detail timestamp with time zone
.now()
mengembalikan timestamp with time zone
atau timestamptz
singkatnya.
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
menampilkan stempel waktu dengan zona waktu seperti yang terlihat di asalnya. Jika saya memahami pertanyaan Anda, maka itulah yang Anda cari.
Anda dapat lebih meningkatkan pemformatan.
Anda mungkin tertarik dengan pertanyaan terkait ini yang menjelaskan ambiguitas dan perangkap zona waktu.