Конвертировать юлианскую дату в метку времени в PostgreSQL - PullRequest
0 голосов
/ 01 марта 2019

У меня есть таблица, заполненная «Юлианскими датами», то есть числом дней и секунд от 1/1/2035 .Мне нужно преобразовать их в обычные метки времени postgres.Кто-нибудь может помочь?

--Converts '2000-06-20 12:30:15' into an Epoch time base which gives a result of -12612.478993055556
select (EXTRACT(epoch FROM ('2000-06-20 12:30:15'::timestamp - '2035-01-01 00:00:00'))/86400.00) as run_ts

--Question, how to convert -12612.478993055556 back into '2000-06-20 12:30:15'
select -12612.478993055556 ??? as run_ts

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете использовать to_timestamp() для преобразования эпохи в отметку времени.

Отправленная вами эпоха не соответствует 2000-06-20, так как вы удалили другую дату 2035-01-01 от него.

select (EXTRACT(epoch FROM ('2000-06-20 12:30:15'::timestamp )));
 date_part
-----------
 961504215
(1 row)

select to_timestamp(961504215);
      to_timestamp
------------------------
 2000-06-20 08:30:15-04
(1 row)


select to_timestamp(-12612.478993055556);
         to_timestamp
-------------------------------
 1969-12-31 15:29:47.521007-05
(1 row)

РЕДАКТИРОВАТЬ

Поскольку вы не рассматриваете истинную эпоху, а действительно разницу между двумя датами, вы можете просто добавить эторазница с контрольной датой.Вы можете использовать интервал day, чтобы устранить необходимость умножения на 86400 (секунд / день)

select  '2035-01-01 00:00:00'::timestamp + interval '1' day *  -12612.478993055556;
      ?column?
---------------------
 2000-06-20 12:30:15
...