Iya nih. Ada kasus penggunaan untuk TIMESTAMP WITHOUT TIME ZONE
.
- Dalam aplikasi bisnis umum jenis ini hanya akan digunakan untuk:
- Pemesanan janji masa depan
- Mewakili waktu yang sama di berbagai zona waktu, seperti siang hari pada tanggal 23 di Tokyo dan di Paris (dua momen berbeda jam terpisah, waktu yang sama)
- Untuk melacak momen, titik-titik spesifik pada timeline, selalu gunakan
TIMESTAMP WITH TIME ZONE
, bukan WITHOUT
.
TIMESTAMP WITHOUT TIME ZONE
nilai bukan titik pada timeline, bukan momen aktual. Mereka mewakili ide kasar tentang momen potensial , kemungkinan poin pada timeline sepanjang kisaran sekitar 26-27 jam (rentang zona waktu di seluruh dunia). Mereka tidak memiliki arti yang nyata sampai Anda menerapkan zona waktu atau mengimbangi dari UTC .
Mis: Natal
Misalnya, Anda perlu mencatat awal liburan / hari suci.
Table: holiday_
Column: year_ Type: SMALLINT
Column: description_ Type: VARCHAR
Column: start_ Type: TIMESTAMP WITHOUT TIME ZONE
Untuk mencatat fakta bahwa Natal dimulai setelah tengah malam pada 25 Desember tahun ini, kita perlu mengatakan 2016-12-25 00:00:00
tanpa zona waktu. Di awal hari Santa, dia mengunjungi Auckland NZ tepat setelah tengah malam, karena itu adalah salah satu malam paling awal di dunia. Kemudian dia bekerja ke arah barat, saat tengah malam berikutnya, segera mencapai Filipina. Kemudian rusa itu bergerak ke arah barat, mencapai India pada tengah malam yang terjadi beberapa jam setelah tengah malam Auckland itu. Jauh kemudian masih tengah malam di Paris FR, dan masih kemudian tengah malam di Montreal CA. Semua kunjungan Santa ini terjadi pada saat-saat yang berbeda adalah waktu , namun semua terjadi tak lama setelah tengah malam, per tengah malam masing-masing daerah.
Jadi merekam 2016-12-25 00:00:00
tanpa zona waktu sebagai awal Natal adalah informatif dan sah, tetapi hanya samar-samar. Sampai Anda mengatakan "Natal di Auckland" atau "Natal di Montréal", kami tidak memiliki momen khusus dalam waktu. Jika Anda merekam momen aktual setiap kali giring mendarat, Anda akan menggunakan TIMESTAMP WITH TIME ZONE
daripada WITHOUT
tipe.
Mirip dengan Natal adalah Malam Tahun Baru. Ketika Times Square Ball jatuh di New York , orang-orang di Seattle masih mendinginkan sampanye mereka dan menyiapkan tanduk pesta mereka . Namun kami akan merekam ide momen Tahun Baru seperti 2017-01-01 00:00:00
pada a TIMESTAMP WITHOUT TIME ZONE
. Sebaliknya, jika kita ingin merekam ketika bola jatuh di New York, atau ketika orang-orang di Seattle meniup terompet mereka, kita lebih suka menggunakan TIMESTAMP WITH TIME ZONE
(tidak WITHOUT
) untuk merekam momen aktual itu, masing-masing berjarak tiga jam dari yang lain.
Mis: Pergeseran Pabrik
Contoh lain mungkin merekam kebijakan yang melibatkan waktu jam dinding di berbagai lokasi. Katakanlah kita memiliki pabrik di Detroit, Düsseldorf, dan Delhi. Jika kita mengatakan bahwa di ketiga pabrik, shift pertama dimulai pada jam 6 pagi dengan istirahat makan siang pada jam 11:30, yang dapat dicatat sebagai a TIMESTAMP WITHOUT TIME ZONE
. Sekali lagi, informasi ini berguna secara samar-samar tetapi tidak menunjukkan saat tertentu dalam waktu sampai kita menerapkan zona waktu. Hari baru baru sadar di timur. Jadi pabrik Delhi akan menjadi yang pertama dibuka pada pukul 6 pagi. Beberapa jam kemudian, pabrik Düsseldorf mulai bekerja pukul 6 pagi. Tetapi pabrik Detroit tidak akan benar-benar terbuka sampai enam jam kemudian, ketika 6:00 terjadi.
Bandingkan ide ini (tentang kapan shift pabrik umumnya dimulai) dengan fakta historis kapan setiap pekerja pabrik jam-in untuk memulai shift mereka pada hari tertentu. Clock-in adalah momen nyata, titik aktual di timeline. Jadi kami akan mencatatnya dalam kolom tipe TIMESTAMP WITH TIME ZONE
bukan WITHOUT
tipe.
Jadi, ya, ada kasus penggunaan yang sah untuk TIMESTAMP WITHOUT TIME ZONE
. Tetapi dalam pengalaman saya dengan aplikasi bisnis, mereka relatif jarang. Dalam bisnis, kita cenderung peduli pada saat-saat aktual: kapan faktur benar-benar tiba, kapan tepatnya kontrak itu berlaku, pada saat apa transaksi bank itu dilaksanakan. Jadi dalam situasi umum seperti itu, kami menginginkan TIMESTAMP WITH TIME ZONE
tipenya.
Untuk diskusi lebih lanjut, lihat Jawaban saya untuk Pertanyaan serupa, Haruskah saya menyimpan stempel waktu UTC atau waktu lokal untuk shift
Postgres
Perhatikan bahwa Postgres khusus tidak pernah menyimpan informasi zona waktu yang ditentukan saat memasukkan stempel waktu.
TIMESTAMP WITH TIME ZONE
- Setiap zona waktu atau offset tertentu yang disertakan dengan data input digunakan untuk menyesuaikan nilai ke UTC dan disimpan. Info zona / offset yang lewat kemudian dibuang. Pikirkan
TIMESTAMP WITH TIME ZONE
sebagai TIMESTAMP WITH RESPECT FOR TIME ZONE
.
- Input pukul 12 siang pada tanggal 7 Maret tahun ini di India akan disesuaikan waktunya dengan UTC dengan mengurangi lima setengah jam: 6:30 pagi.
TIMESTAMP WITHOUT TIME ZONE
- Setiap zona waktu atau offset tertentu yang disertakan dengan data input sepenuhnya diabaikan.
- Masukan dari pukul 12:00 siang pada tanggal 7 Maret tahun ini di India dicatat sebagai pukul 12:00 pada tanggal 7 Maret tahun ini tanpa penyesuaian.
Standar SQL hampir tidak menyentuh pada masalah tipe dan perilaku data tanggal-waktu. Sehingga database bervariasi secara luas dalam penanganan tanggal-waktu.