转换为POSIXct 24小时+小时

时间:2017-06-23 19:32:20

标签: r posixct

我可以在大多数时候转换为POSIXct,例如:

as.POSIXct( "20:16:32", format = "%H:%M:%S" )
[1] "2017-06-23 20:16:32 EDT"

但是一旦时间超过24小时,就会失败:

as.POSIXct( "24:16:32", format = "%H:%M:%S" )
[1] NA

这有点意义,因为24:16:32应该被理解为00:16:32

然而,这些24岁以上的标准在公共交通设计中得到了很好的发展。我当然可以替换所有" 24:" by" 00:",但我相信有更优雅的出路。

1 个答案:

答案 0 :(得分:0)

将时间字符串读入数据帧dd,如果小时数超过24或更多,则将next_day设置为1,否则设置为0。如果next_day为1,则从小时减去24,并添加1天的秒数。鉴于今天是2017年6月23日,这将在0到47之间工作几小时。

x <- "24:16:32" # test input

dd <- read.table(text = x, sep = ":", col.names = c("hh", "mm", "ss"))
next_day <- dd$hh >= 24
s <- sprintf("%s %0d:%0d:%0d", Sys.Date(), dd$hh - 24 * next_day, dd$mm, dd$ss)
as.POSIXct(s) + next_day * 24 * 60 * 60
##  "2017-06-24 00:16:32 EDT"