Ini tercakup dalam manual , tetapi tidak selalu jelas bagaimana cara bekerja dengan tanggal/waktu. Spesifikasi SQL agak aneh.
Dalam kasus pertanyaan Anda, tidak jelas apakah Anda ingin menyimpan waktu dalam UTC tetapi menampilkannya dalam waktu lokal server (TimeZone
), atau apakah Anda ingin mengabaikan TimeZone
dan selalu tampilkan sebagai UTC. Saya akan menganggap yang terakhir.
Untuk stempel waktu, Anda cukup menggunakan AT TIME ZONE
dua kali, seperti:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Anda perlu menggunakan AT TIME ZONE
dua kali. Sekali untuk mengonversi input timestamp
ke timestamptz
sesuai dengan zona waktu argumen, lalu yang lain untuk mengonversinya menjadi timestamp
di UTC.
Sayangnya karena cara (IMO gila) spesifikasi SQL mendefinisikan AT TIME ZONE
untuk TIME
, Anda tidak dapat melakukan hal yang sama untuk TIME
. Anda harus memanipulasi TimeZone
variabel sebagai gantinya:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Ini masih memberi Anda timetz
bukan time
. Jadi nilai tampilannya berubah dengan timezone
pengaturan.