usa timestamptz
memorizzerà il tuo timestamp in UTC. e lo mostrerà al client in base alla sua locale.
https://www.postgresql.org/docs/current/static /datatype-datetime.html
aggiornato con un altro buon punto di Lukasz , dovevo citare:
Non farlo porterebbe alla data "2017-12-31" con l'ora "23:01:01" in un altro fuso orario, infatti, non solo un'ora diversa, ma una data diversa con tutti ANNO, MESE e GIORNO diversi
un altro aggiornamento Come da Laurenz avviso, non dimenticare la citazione dei documenti sopra Un valore di input che ha un fuso orario esplicito specificato viene convertito in UTC utilizzando l'offset appropriato per quel fuso orario . Ciò significa che devi gestire con attenzione le date di input. Es.:
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)