Postgres 9.5'te, yıl ile denemeler yaparken 0001
(sıfır yıl yok 0000
) aşağıda görülen sonucu gördüğüme şaşırdım .
Ofseti -07:52:58
?
Bazı örnek kodlar. Ben karma kullanımı o Not TIMESTAMP WITH TIME ZONE
ve TIMESTAMP WITHOUT TIME ZONE
çok dikkatlice okuyun.
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")
Bunun ikinci değere tarafından sürpriz: 0001-12-31 16:07:02-07:52:58 BC
. America/Los_Angeles
UTC'nin sekiz saat gerisinde olduğu gibi sekiz saat geriye gitmemiz gerektiğini anlıyorum -08:00
. Ama -08:00
ofset yerine -07:52:58
. Neden?
UTC altında sorun yok
UTC altında veri girerken böyle bir sorun yok.
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")
Sıfır Yıl Yok
Bu arada, tarih bölümü doğru görünüyor. Görünüşe göre 0000
“BC” ve “AD” dönemleri arasındaki pivot nokta olmak için bir yıl yok . 0001 yılının ilk anını alın, bir saat çıkarın ve yıl olsun 0001 BC
- sıfır yıl yok.
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_ ;
Sonuç yıl 0001 BC
biz atlamak böylece, 0001
hiç 0001 BC
; sıfır yıl yok 0000
.
"0001-12-31 23:00:00+00 BC"
0000
geçerli bir yıl değerine sahip olmasını destekler, ancak kullanılıp kullanılmadığı konusunda ısrar etmez ). PostgreSQL'in formu 0 yıl olmadan kullandığı doğrudur, ancak evrensel bir gerçekmiş gibi "yıl 1 değil 0 başlar" diyemezsiniz. Örneğin astronomik veriler için aralarını çevirmek kolaydır. (Üçüncü binyıl 2001'de hala her iki şekilde de başladı, çünkü 1 CE'den beri üçüncü binyıl olarak kaldı)