在 PostgreSQL 中将儒略日期转换为时间戳
Convert Julian Date to Timestamp in PostgreSQL
我有一个table满"Julian Dates",也就是距离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
您可以使用 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 (seconds/day)
的需要
select '2035-01-01 00:00:00'::timestamp + interval '1' day * -12612.478993055556;
?column?
---------------------
2000-06-20 12:30:15
我有一个table满"Julian Dates",也就是距离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
您可以使用 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 (seconds/day)
select '2035-01-01 00:00:00'::timestamp + interval '1' day * -12612.478993055556;
?column?
---------------------
2000-06-20 12:30:15