Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中将Julian日期转换为时间戳_Postgresql_Datetime_Epoch_Julian Date - Fatal编程技术网

在PostgreSQL中将Julian日期转换为时间戳

在PostgreSQL中将Julian日期转换为时间戳,postgresql,datetime,epoch,julian-date,Postgresql,Datetime,Epoch,Julian Date,我有一张满是“朱利安日期”的桌子,这是距离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:0

我有一张满是“朱利安日期”的桌子,这是距离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
可以使用将历元转换为时间戳

您发布的纪元与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)
编辑

由于您考虑的不是一个真正的纪元,而是两个日期之间的差异,因此可以简单地将此差异添加到参考日期中。您可以使用
间隔来消除乘以86400(秒/天)的需要


如果
-12612.478993055556
真的是一个“纪元”,它需要产生
1969-12-31 21:29:47.521
因为“纪元”是自
1970-01-01 00:00:00
以来的秒数同意,我应该澄清它不是真正的纪元,因此我的痛苦:(是的,我应该澄清一下,讨论中的日期非常重要。存放此信息的数据平台决定2035-01-01是测量的起始日期和真实日期,因此它不是真实的大纪元时间,因此我的问题。我目前正在使用您的解决方案,尝试在使用时间戳后对此进行解释:)谢谢@JGH这正是我需要的,我基本上试过了,但失败了。很好!
select  '2035-01-01 00:00:00'::timestamp + interval '1' day *  -12612.478993055556;
      ?column?
---------------------
 2000-06-20 12:30:15