In Postgres 9.5, sono stato sorpreso di vedere il risultato visto sotto mentre sperimentavo l'anno 0001
(nessun anno zero 0000
).
Offset di -07:52:58
?
Qualche codice di esempio. Nota che ho mescolato l'uso di TIMESTAMP WITH TIME ZONE
e TIMESTAMP WITHOUT TIME ZONE
, quindi leggi attentamente.
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")
Mi sorprende che secondo valore: 0001-12-31 16:07:02-07:52:58 BC
. Capisco che dobbiamo tornare indietro di otto ore, così come America/Los_Angeles
otto ore dietro UTC con un offset di -08:00
. Ma invece -08:00
dell'offset è -07:52:58
. Perché?
Nessun problema con UTC
Nessun problema di questo tipo durante l'immissione dei dati in 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")
Nessun anno zero
A proposito, la parte della data sembra essere corretta. Sembra che non ci sia un anno 0000
, essendo questo il punto di snodo tra le epoche "BC" e "AD". Prendi il primo momento dell'anno 0001, sottrai un'ora e ottieni l'anno 0001 BC
, quindi nessun anno zero.
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_ ;
Il risultato è l'anno 0001 BC
, quindi saltiamo da 0001
a 0001 BC
; nessun anno zero 0000
.
"0001-12-31 23:00:00+00 BC"
0000
un valore dell'anno valido ma non insistendo sull'opportunità o meno ). È vero che PostgreSQL utilizza il modulo senza anno 0, ma non si può affermare che "anni iniziano a 1, non 0" come se fosse una sorta di fatto universale. È facile tradurli tra loro per es. Dati astronomici. (Il terzo millennio iniziava comunque nel 2001, poiché rimase il terzo millennio dal 1 ° CE)