Postgres функция to_timestamp - PullRequest
       21

Postgres функция to_timestamp

1 голос
/ 05 апреля 2020

У меня есть скрипт python, который вставляет почасовые показания в postgres дБ. Это терпит неудачу в 2010-03-28. Как postgres интерпретирует и 01:00:00, и 02:00:00 как 02:00:00. что я делаю не так (пс: работает на другие даты до этого)

 select to_timestamp('28/03/2010 01:00:00','DD/MM/YYYY HH24:MI:SS');
      to_timestamp
------------------------
 2010-03-28 02:00:00+01
(1 row)

select to_timestamp('28/03/2010 02:00:00','DD/MM/YYYY HH24:MI:SS');
      to_timestamp
------------------------
 2010-03-28 02:00:00+01
(1 row)

1 Ответ

0 голосов
/ 05 апреля 2020

что я делаю не так?

Ничего плохого.

Как прокомментировал a_horse_with_no_name, вы видите эффект перехода на летнее время. В 2 часа ночи CET 28 марта часы пропускают один час и переходят прямо к 3 часам утра. Я предполагаю, что ваш часовой пояс составляет UTC+01, поэтому вы видите это в 1:00> 2:00.

Этот конкретный день имеет только 23 часа: обе даты представляют один и тот же момент времени, который вы видим в результатах, сгенерированных to_timestamp().

Извлечение соответствующих эпох, вы также можете увидеть, что результаты идентичны:

select 
    to_timestamp('28/03/2010 01:00:00','DD/MM/YYYY HH24:MI:SS') "1 AM",
    to_timestamp('28/03/2010 02:00:00','DD/MM/YYYY HH24:MI:SS') "2 AM",
    extract(epoch from to_timestamp('28/03/2010 01:00:00','DD/MM/YYYY HH24:MI:SS')) "1 AM epoch",
    extract(epoch from to_timestamp('28/03/2010 02:00:00','DD/MM/YYYY HH24:MI:SS')) "2 AM epoch"
1 AM                   | 2 AM                   | 1 AM epoch | 2 AM epoch
:--------------------- | :--------------------- | :--------- | :---------
2010-03-28 02:00:00+01 | 2010-03-28 02:00:00+01 | 1269738000 | 1269738000

Это только один из много трюков, связанных с работой с датами. С точки зрения Postgres 'вы ничего не можете с этим поделать: ваше приложение должно это обработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...