Convert decimal day to HH:MM

Using chron:

chron::times(0.8541667)
#[1] 20:30:00

Try this:

R> format(as.POSIXct(Sys.Date() + 0.8541667), "%H:%M", tz="UTC")
[1] "20:30"
R> 

We start with a date--which can be any date, so we use today--and add your desired fractional day.

We then convert the Date type into a Datetime object.

Finally, we format the hour and minute part of the Datetime object, ensuring that UTC is used for the timezone.


One option with data.table:

> library(data.table)
> structure(as.integer(0.4305556*60*60*24), class="ITime")
[1] "10:20:00"

We convert from day fraction to seconds since midnight; coerce to integer; and apply ITime class. (ITime works with integer-stored seconds since midnight.)

Other resources:

  • @GaborGrothendieck re chron package and link to his R News article with Thomas Petzoldt about converting from Excel in particular Converting a time decimal/fraction representing days to its actual time in R?
  • @JorisChau re RStudio's hms package how to convert excel internal coding for hours to hours in R?