Trong Postgres 9.5, tôi đã rất ngạc nhiên khi thấy kết quả được nhìn thấy bên dưới trong khi thử nghiệm với năm 0001
(không có năm nào 0000
).
Bù đắp -07:52:58
?
Một số ví dụ mã. Lưu ý rằng tôi đã sử dụng hỗn hợp TIMESTAMP WITH TIME ZONE
và TIMESTAMP WITHOUT TIME ZONE
, vì vậy hãy đọc kỹ.
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")
Tôi ngạc nhiên bởi giá trị thứ hai đó : 0001-12-31 16:07:02-07:52:58 BC
. Tôi hiểu rằng chúng ta phải quay ngược tám giờ so với America/Los_Angeles
tám giờ sau UTC với mức bù là -08:00
. Nhưng thay vì -08:00
bù là được -07:52:58
. Tại sao?
Không có vấn đề theo UTC
Không có vấn đề như vậy khi nhập dữ liệu theo 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")
Không năm không
Nhân tiện, phần ngày dường như là chính xác. Dường như không có năm nào 0000
, đó là điểm mấu chốt giữa thời đại của BC BC và thời điểm AD AD. Lấy khoảnh khắc đầu tiên của năm 0001, trừ đi một giờ và bạn có được năm 0001 BC
- vì vậy không có năm nào.
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_ ;
Kết quả là năm 0001 BC
, vì vậy chúng tôi nhảy từ 0001
để 0001 BC
; không có năm zero 0000
.
"0001-12-31 23:00:00+00 BC"
0000
giá trị năm hợp lệ nhưng không nhấn mạnh vào việc nó có được sử dụng hay không ). Đúng là PostgreSQL sử dụng biểu mẫu không có năm 0, nhưng bạn không thể nói "năm bắt đầu 1, không phải 0" như thể đó là một loại thực tế phổ biến. Thật dễ dàng để dịch giữa chúng ví dụ như dữ liệu thiên văn. (Thiên niên kỷ thứ ba vẫn bắt đầu vào năm 2001, vì nó vẫn là thiên niên kỷ thứ ba kể từ 1 CE)