Search code examples
rdatetimelubridate

Is it possible to print a duration with HH:MM:SS format?


t1<-as.POSIXct("2017-03-02 11:58:20")
t2<-as.POSIXct("2017-03-02 12:00:05")
print(lubridate::as.duration(lubridate::interval(t1,t2)))

[1] "105s (~1.75 minutes)"

Is it possible to have the duration expressed in HH:MM:SS? So in this case it would be:

00:01:45


Solution

  • You can use seconds_to_period from lubridate with sprintf

    library(lubridate)
    td <- seconds_to_period(difftime(t2, t1, units = "secs"))
    sprintf('%02d:%02d:%02d', td@hour, minute(td), second(td))
    #[1] "00:01:45"
    

    This is based on an earlier discussion - Converting seconds to days: hours:minutes:seconds in r?