Lubridate 无法舍入 Period 对象

Lubridate can't round a Period object

我试图将 lubridate Period 对象四舍五入到最接近的分钟。

library(lubridate)
round_date(as.period("2d 20H 22M 9.57S"))

给予

Error in as.POSIXct.numeric(x) : 'origin' must be supplied

所以 round_date 正在将我的句点转换为 POSIXct,但为什么呢?是否可以在 lubridate 中舍入句点而不将它们转换为另一种格式?好像我错过了一些简单的东西。

谢谢!

根据?round_date,该函数需要第一个参数一个日期时间对象向量。因此,它不应该用于周期对象。

可以在 ?as.period 中找到为什么通常无法舍入周期对象的解释:周期中每个时间单位的确切长度将取决于它何时发生。 [...] 例如,当出现闰秒时,一分钟长于 60 秒。

lubridate非常仔细地区分了DurationIntervalPeriod类。

我肯定认为最好的办法是转成数值,也就是说,以秒为单位,除以60为分,再乘以60为秒,四舍五入,然后时期。然后你会得到最近的分钟。

seconds_to_period(round(as.numeric(as.period("2d 20H 22M 9.57S"))/60)*60)
[1] "2d 20H 22M 0S"

如果您想估计秒数,可以执行以下操作

seconds_to_period(round(as.numeric(as.period("2d 20H 22M 9.57S"))))
[1] "2d 20H 22M 10S"

自从打开这个问题后,现在可以像 中那样对 lubridate Period 进行舍入。 这是您的案例示例:

library("lubridate")  
round(as.period("2d 20H 22M 9.57S"))  
[1] "2d 20H 22M 10S"