Как я могу express длительности времени (например, как возвращено lubridate::dminutes()
или lubridate::duration()
) в формате продолжительности ISO 8601 ?
Пакет lubridate
может parse Продолжительность ISO 8601:
lubridate::duration("PT1H3M")
# "3780s (~1.05 hours)"
Но я не знаю, как это изменить, т. е. как отформатировать или уменьшить до ISO 8601.
Желаемый вывод в псевдокоде:
library(magrittr)
"PT1H3M" %>%
lubridate::duration() %>%
format_to_iso8601() # pseudo function
# [1] "PT1H3M"
Я видел, что раньше существовало lubridate::format_ISO8601()
, которое могло бы это сделать, но это не является частью текущей версии пакета
Аналогично, parsedate::format_iso_8601()
форматирует в ISO 8601, но только даты или даты, а не длительности.
РЕДАКТИРОВАТЬ
Похоже, lubridate::as.period()
может сделать обходной путь:
iso_duration <- "PT1H3M" %>%
lubridate::duration() %>%
lubridate::as.period() %>%
stringr::str_replace_all("\\s", "") %>%
stringr::str_c("PT", .)
iso_duration
# [1] "PT1H3M0S"
iso_duration %>%
lubridate::duration()
# [1] "3780s (~1.05 hours)"