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

Sisipkan waktu dengan waktu musim panas zona waktu

tepat caranya adalah dengan tidak menggunakan time with time zone (perhatikan jarak antara time dan zone ) sama sekali, karena rusak oleh desain. Itu dalam standar SQL, jadi Postgres mendukung jenisnya - tetapi menyarankan tidak untuk menggunakannya. Lebih banyak dalam jawaban terkait ini:

Karena Anda mengalami masalah dengan DST , time (nama pendek) adalah pilihan yang sangat buruk. Ini tidak dilengkapi dengan baik untuk menangani DST. Tidak mungkin untuk mengetahui apakah 8:00:00 sedang musim dingin atau musim panas.

Gunakan timestamp with time zone (timstamptz ) alih-alih. Anda selalu dapat membuang bagian tanggal. Cukup gunakan start_time::time untuk mendapatkan lokal waktu dari timestamptz . Atau gunakan AT TIME ZONE untuk mentranspos ke zona waktu Anda.

Umumnya, untuk memperhitungkan DST secara otomatis , gunakan nama zona waktu bukan singkatan zona waktu. Penjelasan lebih lanjut dalam pertanyaan &jawaban terkait ini:

Dalam kasus khusus Anda, Anda mungkin dapat menggunakan America/Los_Angeles (contoh dengan timestamptz ):

INSERT INTO mytable(start_time, end_time)
VALUES
   ('1970-01-01 08:00:00 America/Los_Angeles'
  , '1970-01-01 18:00:00 America/Los_Angeles')

Saya menemukan ini dengan memeriksa:

SELECT * FROM pg_timezone_names 
WHERE  utc_offset = '-07:00'
AND    is_dst;

Dasar-dasar tentang penanganan 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. Bagaimana cara Mengambil id dari baris yang disisipkan saat menggunakan upsert dengan WITH cluse di Posgres 9.5?

  2. Hibernasi Beda dengan pesanan oleh

  3. Instalasi PostgreSQL Ketersediaan Tinggi Patroni

  4. Pemicu acara ROLLBACK di postgresql

  5. Membandingkan banyak kueri PostgreSQL