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"
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)