Все метки времени в Postgres хранятся в UTC независимо от конфигурации сервера. Это важно понимать, в отличие от других баз данных, он не интерпретирует ваш ввод как местный часовой пояс. Однако он представит его обратно в своем часовом поясе.
timestamp
хранит только время без часового пояса. timestamp
хранит UTC плюс часовой пояс.
Демонстрация их вместе на сервере Postgres с его часовым поясом UTC ...
=> create table demo ( time timestamp, timetz timestamptz );
CREATE TABLE
=> insert into demo values ('2019-10-07 10:00', '2019-10-07 12:00 +0200');
INSERT 0 1
=> select * from demo;
time | timetz
---------------------+------------------------
2019-10-07 10:00:00 | 2019-10-07 10:00:00+00
timestamp
игнорирует смещение и простомагазины 7 октября 2019 года 10:00 без смещения. В то время как timestamptz
хранит смещение +0200, но представляет мне время в своем часовом поясе UTC. Это один и тот же момент времени.
Вы можете изменить часовой пояс базы данных для вашего сеанса на CEST. Затем Postgres отформатирует timestamptz в CEST.
=> set time zone 'Antarctica/Troll';
=> select * from demo;
time | timetz
---------------------+------------------------
2019-10-07 10:00:00 | 2019-10-07 12:00:00+02
Но это хрупко. Вы должны убедиться, что это происходит при каждом соединении. Ваше приложение полагается на конкретную конфигурацию подключения к вашей базе данных. Это анти-паттерн действия на расстоянии . Непонятно, что делает форматирование, и если оно удалено, многие, казалось бы, несвязанные вещи ломаются.
Вместо этого вам следует переформатировать время, как вам нравится, после получения их из базы данных. Вы можете сделать это вручную ...
=> select timetz at time zone 'CEST' from demo;
timezone
---------------------
2019-10-07 12:00:00
Но, как правило, об этом заботится ORM. Я не знаю typeorm
, но у большинства есть средства для последовательного перевода типов баз данных. Вы должны быть в состоянии настроить typeorm
для автоматического перевода Postgres timestamptz в часовой пояс вашего локального приложения. А еще лучше, вместо того, чтобы возвращать строку, она может преобразовать ее в надлежащий объект Time, над которым вы затем имеете полный контроль.