格式化lubridate的as.period()输出

时间:2019-05-15 17:30:16

标签: r time translation lubridate

我当前有一个周期对象,其值为:

"35d 17H 15M 28.9999999995343S"

我想得到一个不同的输出:

35 days 17 hours 15 minutes 28 seconds

我还希望能够对其进行格式化,以使时间单位是否为“ s”(取决于时间单位是否大于1)。

我已经尝试使用attr(period_object, "unit")获取对象的属性,但是由于似乎它们不在对象中,所以我无法修改 seconds

str(as.period(period_object))
Formal class 'Period' [package "lubridate"] with 6 slots
  ..@ .Data : num 29
  ..@ year  : num 0
  ..@ month : num 0
  ..@ day   : num 35
  ..@ hour  : num 17
  ..@ minute: num 15

以下是数据示例:

library(lubridate)
time1 <- as.POSIXct("2019-01-01 15:12:07")
time2 <- as.POSIXct("2019-02-06 08:27:36")
period_object <- difftime(time2, time1)

as.period(period_object)
[1] "35d 17H 15M 28.9999999995343S"

所以我想要的最终输出是: 35 days 17 hours 15 minutes 28 seconds

有人知道吗?谢谢。

1 个答案:

答案 0 :(得分:1)

秒数的一种方法:

period_object %/% dseconds(1) %% 60
#[1] 28

以这种方式获取它们:

days    <- period_object %/% ddays(1)
hours   <- period_object %/% dhours(1) %% 24
minutes <- period_object %/% dminutes(1) %% 60
seconds <- period_object %/% dseconds(1) %% 60