我们如何在 lubridate 中添加持续时间 HMS 格式

How can we add time durations HMS formats in lubridate

虽然也有一些问题和一些解决方法的答案,但我找不到添加 hours/minutes/seconds 对象的直接方法?

让我们通过一个例子来考虑。我有一个矢量 a,其时间间隔采用 HH:MM:SS 格式。我可以使用 lubridate::hms 轻松解析它,如下所示

a <- c("38:03:24", "6:50:58", "0:31:54", "8:13:51")
hms(a)

[1] "38H 3M 24S" "6H 50M 58S" "31M 54S"    "8H 13M 51S"

但是我怎样才能对这个向量求和呢?

> sum(hms(a))
[1] 187

as.periodseconds等帮不上忙。那么我怎样才能将给定向量中的所有值相加而不将其转换为第一秒然后模除然后分钟然后模除....

我的预期输出会像 54H 8M 7S

我还有一个问题,当我分别添加每个元素时,它以所需的格式添加,但不正确?为什么?以及如何纠正它?

> hms(a)[1] + hms(a)[2]
[1] "44H 53M 82S"

显然 82S 应该转换为 22S 并且 53M 应该转换为 54M

a <- c("38:03:24", "6:50:58", "0:31:54", "8:13:51")

td <- as.period(seconds(sum(as.numeric(hms(a)))), unit = "hour")
# [1] "53H 40M 7S"
sprintf('%02d:%02d:%02d', td$hour, td$minute, td$second)
# [1] "53:40:07"