R 中如何将相对小时数转换为 HH:MM 时间?
数据小许
将小时数换算成分钟后,用 %% 将结果归一到一天内,再通过 sprintf() 格式化为 HH:MM:
hours <- c(-2, -1.5, 0, 2.5, 4)
minutes <- as.integer(round(hours * 60)) %% (24L * 60L)
time_of_day <- sprintf("%02d:%02d", minutes %/% 60L, minutes %% 60L)
time_of_day
# [1] "22:00" "22:30" "00:00" "02:30" "04:00"
%% 会把总分钟数转换到 0 到 1439 之间。因此,-2 小时会显示为当天的 22:00,24 小时会显示为 00:00。结果只保留钟表时间,不包含前一天或次日的信息。
这里用 round() 消除浮点数表示可能带来的微小误差。对于按半小时递增的输入,换算结果是整分钟。此写法适用于有限的数值型小时数,且输入在 -24 到 24 之间。如果输入可能包含 NA、无穷值或任意精度的小数,则需要另行处理。
备注:内容仅供参考。
