Saya berasumsi Anda memiliki kolom bernama ct
yang memiliki tipe TIMESTAMPTZ
dalam tabel t
. Kemudian Anda dapat menggunakan:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
untuk mendapatkan offset zona waktu dalam hitungan detik. Itu memberi Anda 3600
dari UTC
/GMT
itu berarti GMT+1
, CET
atau terserah. Nilai yang dikembalikan tergantung pada TIMEZONE
Anda pengaturan.
Contoh (Saya tinggal di Jerman, zona waktu sebenarnya adalah GMT+1
/CET
):
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
timestamptz
------------------------
2008-01-01 18:00:00+01
test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
timestamptz
------------------------
2008-01-01 17:00:00+00
Seperti yang Anda lihat, selalu menampilkan apa pun di zona waktu yang dikonfigurasi. Jadi offset yang akan Anda dapatkan dengan EXTRACT(TIMEZONE FROM ...)
tergantung pada TIMEZONE
pengaturan. Zona waktu yang diberikan pada INSERT
hilang, karena tidak layak untuk diselamatkan. Yang penting adalah semuanya benar dan tidak bergantung pada TIMEZONE
pengaturan. PostgreSQL melakukannya dengan sangat baik.