PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Tentukan zona waktu untuk digunakan sebagai zona waktu referensi

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 DI ZONA WAKTU konstruksi, dan bagaimana saya mengekstrak zona waktu dari (lokal!) 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sumber fungsi ekstraksi postgresql

  2. Pemicu DB Postgres memanggil Fungsi Java

  3. Pesan dengan hubungan has_many

  4. Cara Mendapatkan Tanggal dan Waktu Saat Ini dengan Offset Zona Waktu di PostgreSQL

  5. Hentikan kueri yang digantung (menganggur dalam transaksi)