Формат времени продолжительности ISO 8601 - PullRequest
0 голосов
/ 28 января 2020

Как я могу 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)"

...