PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Data e hora em UTC - como armazená-los no postgres?


use timestamptz ele armazenará seu carimbo de hora em UTC. e o exibirá para o cliente de acordo com sua localidade.

https://www.postgresql.org/docs/current/static /datatype-datetime.html

atualizado com outro bom ponto de Lukasz , eu tinha que mencionar:

Não fazer isso levaria à data '2017-12-31' com a hora '23:01:01' em outro fuso horário, na verdade, não seria apenas uma hora diferente, mas uma data diferente com todos os ANO, MÊS e DIA diferentes

outra atualização Conforme Laurenz aviso, não se esqueça da citação de documentos acimaUm valor de entrada que tem um fuso horário explícito especificado é convertido em UTC usando o deslocamento apropriado para esse fuso horário . O que significa que você precisa gerenciar as datas de entrada com cuidado. Por exemplo:
t=# create table t(t timestamptz);
CREATE TABLE
t=# set timezone to 'GMT+5';
SET
t=# insert into t select '2017-01-01 00:00:00';
INSERT 0 1
t=# insert into t select '2017-01-01 00:00:00' at time zone 'UTC';
INSERT 0 1
t=# insert into t select '2017-01-01 00:00:00+02';
INSERT 0 1
t=# select * from t;
           t
------------------------
 2017-01-01 00:00:00-05
 2017-01-01 05:00:00-05
 2016-12-31 17:00:00-05
(3 rows)