No caso do MySQL ,
Os valores TIMESTAMP são armazenados como o número de segundos desde a época ('1970-01-01 00:00:00' UTC)`
No caso de PostgreSQL com versão menor ou igual a 9.6
os valores de timestamp são armazenados como segundos antes ou depois da meia-noite 2000-01-01
No caso de PostgreSQL com versão maior ou igual a 10 , não há explicação sobre isso
Tenho duas perguntas sobre a lógica interna do PostgreSQL.
- Ele ainda usa o mesmo padrão da versão 9.6?
- Por que "meia-noite 2000-01-01"? A época do Unix começa em
1970-01-01 00:00:00 UTC
. A época J2000 começa em12 noon (midday) on January 1, 2000
.
Parece que apenas alguns sistemas usam 2000-01-01 00:00:00
.
Como o PostgreSQL fornece funções para converter UNIX epoch em timestamp to_timestamp
ou vice-versa EXTRACT(EPOCH FROM ...)
, usar o padrão diferente do UNIX epoch parece exigir cálculos de deslocamento adicionais.