将以毫秒为单位的纪元持续时间(几天)转换为时间

Convert epoch duration (few days) in ms to time

我正在尝试将以毫秒为单位的持续时间转换为人类可读的格式。如果低于 24 小时,它工作正常,但一旦超过该值,它会再次从 0 开始。是否可以在超过天数限制后保留小时数?

我当前的代码实现(在 Postgres 中)包含以下内容:

create table test (time_unix text);

insert into test values ('7200000'); --2h
insert into test values ('28800000'); --8h
insert into test values ('1800000'); -- 30min
insert into test values ('252000000'); -- 70h
insert into test values ('86400000') -- 24h

select (timestamp 'epoch' + time_unix::bigint* interval '1 ms')::time
from test;

当前输出:

time
02:00:00
08:00:00
00:30:00
22:00:00
00:00:00

期望的输出:

time
02:00:00
08:00:00
00:30:00
70:00:00
24:00:00

正如 a_horse_with_no_name 评论的那样,数据类型 time 表示“时间点”而不是持续时间。所以70h不能表示为一个time值(最大的时间值是24:00:00)。您可能希望将其转换为 interval

SELECT time_unix::bigint * INTERVAL '1 ms' FROM test;

 ?column? 
══════════
 02:00:00
 08:00:00
 00:30:00
 70:00:00
 24:00:00
(5 rows)

数据类型text完全不适合存储数字;请使用更理智的东西。