Untuk zona waktu Anda dapat:
SHOW timezone;
atau yang setara:
SELECT current_setting('TIMEZONE');
tetapi ini dapat dalam format apa pun yang diterima oleh server, sehingga dapat mengembalikan UTC
, 08:00
, Australia/Victoria
, atau serupa.
Dengan frustrasi, tampaknya tidak ada fungsi bawaan untuk melaporkan offset waktu dari UTC yang digunakan klien dalam jam dan menit, yang tampaknya agak gila bagi saya. Anda bisa mendapatkan offset dengan membandingkan waktu saat ini di UTC dengan waktu saat ini secara lokal:
SELECT age(current_timestamp AT TIME ZONE 'UTC', current_timestamp)`
... tapi IMO lebih bersih untuk mengekstrak offset tz dalam hitungan detik dari current_timestamp
dan konversikan ke interval:
SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
Itu akan cocok dengan hasil yang diinginkan kecuali tidak menghasilkan nol di depan, jadi -05:00
hanya -5:00
. Mengganggu tampaknya tidak mungkin untuk mendapatkan to_char
untuk menghasilkan nol di depan selama berjam-jam, meninggalkan saya dengan pemformatan manual jelek berikut:
CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
SELECT to_char(extract(timezone_hour FROM current_timestamp),'FM00')||':'||
to_char(extract(timezone_minute FROM current_timestamp),'FM00');
$$ LANGUAGE 'SQL' STABLE;
Kredit ke Glenn untuk timezone_hour
dan timezone_minute
alih-alih peretasan yang saya gunakan sebelumnya dengan extract(timezone from current_timestamp) * INTERVAL '1' second)
dan CTE.
Jika Anda tidak memerlukan nol di depan, Anda dapat menggunakan:
CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
$$ LANGUAGE 'SQL' STABLE;
Lihat juga: