首页 > 解决方案 > 在 PostgreSQL 中将 Julian 日期转换为时间戳

问题描述

我有一张充满“朱利安日期”的表格,即距离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

标签: postgresqldatetimeepochjulian-date

解决方案


您可以使用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

推荐阅读