Di Postgres 9.5, saya terkejut melihat hasil yang terlihat di bawah saat bereksperimen dengan tahun 0001
(tidak ada tahun nol 0000
).
Mengimbangi -07:52:58
?
Beberapa contoh kode. Perhatikan bahwa saya mencampur penggunaan TIMESTAMP WITH TIME ZONE
dan TIMESTAMP WITHOUT TIME ZONE
, jadi baca dengan cermat.
SET TIME ZONE 'America/Los_Angeles' ;
SELECT (TIMESTAMP WITH TIME ZONE '2015-01-01 00:00:00.0',
TIMESTAMP WITH TIME ZONE '0001-01-01 00:00:00.0Z',
TIMESTAMP WITHOUT TIME ZONE '0001-01-01 00:00:00.0Z') ;
("2015-01-01 00:00:00-08","0001-12-31 16:07:02-07:52:58 BC","0001-01-01 00:00:00")
Saya terkejut oleh yang nilai kedua: 0001-12-31 16:07:02-07:52:58 BC
. Saya mengerti bahwa kita harus mundur delapan jam sebagaimana America/Los_Angeles
delapan jam di belakang UTC dengan offset -08:00
. Tapi bukannya -08:00
offset itu -07:52:58
. Mengapa?
Tidak Ada Masalah Di Bawah UTC
Tidak ada masalah seperti itu saat memasukkan data di bawah UTC.
SET TIME ZONE 'UTC' ;
SELECT (TIMESTAMP WITH TIME ZONE '2015-01-01 00:00:00.0',
TIMESTAMP WITH TIME ZONE '0001-01-01 00:00:00.0Z',
TIMESTAMP WITHOUT TIME ZONE '0001-01-01 00:00:00.0Z');
("2015-01-01 00:00:00+00","0001-01-01 00:00:00+00","0001-01-01 00:00:00")
Tanpa Tahun Nol
Ngomong-ngomong, porsi tanggal tampaknya benar. Tampaknya tidak ada tahun 0000
, yang menjadi titik pivot antara era “BC” dan “AD”. Ambil momen pertama tahun 0001, kurangi satu jam, dan Anda mendapatkan tahun 0001 BC
- jadi tidak ada tahun nol.
SET TIME ZONE 'UTC' ;
INSERT INTO moment_ -- TIMESTAMP WITH TIME ZONE.
VALUES ( TIMESTAMP '0001-01-01 00:00:00.0Z' - INTERVAL '1 hour' ) ;
SET TIME ZONE 'UTC' ;
TABLE moment_ ;
Hasilnya adalah tahun 0001 BC
, jadi kami beralih dari 0001
ke 0001 BC
; tidak ada tahun nol 0000
.
"0001-12-31 23:00:00+00 BC"
sumber
0000
sebagai nilai tahun yang valid tetapi tidak bersikeras apakah itu digunakan atau tidak ). Memang benar PostgreSQL menggunakan formulir tanpa tahun 0, tetapi Anda tidak dapat menyatakan "tahun memulai 1, bukan 0" seolah-olah itu semacam fakta universal. Sangat mudah untuk menerjemahkan di antara mereka untuk mis data astronomi. (Milenium ketiga masih dimulai pada tahun 2001, karena tetap milenium ketiga sejak 1 CE)Jawaban:
Pada 18 November 1883 pukul 12.00 (waktu baru), waktu standar diadopsi oleh kereta api Amerika.
Ini berarti bahwa sebelum waktu itu, Los Angeles menggunakan waktu lokal aktual, berdasarkan waktu matahari rata-rata. Setelah itu, ia dipindahkan ke zona waktu lokalnya, yang, sebagai penyeimbang integral dari waktu Greenwich Mean Time, sedikit berbeda dari waktu sebelumnya.
Ingin tahu lebih banyak?
Unduh Database Zona Waktu tzdata dari IANA: Zona waktu .
Di dalam, Anda akan menemukan definisi dari zona waktu (banyak), yang memiliki banyak variasi dari waktu ke waktu, bersama dengan banyak komentar yang merinci perubahan apa yang dibuat di mana dan kapan. Ini bacaan yang menghibur!
Wikipedia juga memiliki beberapa fakta menarik, di halaman Wikipedia: Zona waktu , mengenai perubahan 1883, 18 November:
Perhatikan juga bahwa ini tidak spesifik untuk Postgresql. Ini berlaku untuk semua perangkat lunak atau sistem operasi yang menggunakan basis data tzdata (walaupun tentu saja banyak yang akan terbatas pada tanggal setelah tahun 1970 atau pasca 1901, jadi tahun 1883 tidak terjangkau, tetapi ada banyak, banyak penyesuaian lainnya di semua tempat di waktu yang berbeda).
sumber