将以毫秒为单位的纪元持续时间(几天)转换为时间
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
完全不适合存储数字;请使用更理智的东西。
我正在尝试将以毫秒为单位的持续时间转换为人类可读的格式。如果低于 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
完全不适合存储数字;请使用更理智的东西。