【发布时间】:2015-05-27 13:44:01
【问题描述】:
我有一个号码154958。我想转换成HH:MM:SS。
我正在寻找的答案是15:49:58。
【问题讨论】:
我有一个号码154958。我想转换成HH:MM:SS。
我正在寻找的答案是15:49:58。
【问题讨论】:
这可能是上述答案的派生,但您可以使用“hms”包:
library(hms)
strptime("154958", "%H%M%S") %>% hms::as.hms()
【讨论】:
先转换为日期,再转换为子字符串:
substr(strptime("154958", format = "%H%M%S"), 12, 20)
甚至更好的版本(感谢@Roland):
format(strptime("154958", format = "%H%M%S"), format = "%H:%M:%S")
【讨论】:
format(strptime("154958",format="%H%M%S"), format="%H:%M:%S") 会更好。
你可以试试下面的。
> x <- "154958"
> gsub("^(\\d{2})(\\d{2})(\\d{2})$", "\\1:\\2:\\3", x)
[1] "15:49:58"
>
或
> gsub("(\\d{2})(?!$)", "\\1:", x, perl=T)
[1] "15:49:58"
【讨论】:
gsub("(..)(..)(..)", "\\1:\\2:\\3", x) 对于第一个选项就足够了。
perl=TRUE,但我的意思是您可以使用(..) 进一步简化它。我还看到你的大量反对票被推翻了。干杯。
使用chron 包
library(chron)
times(chron(times = "154958", format = "hms"))
## [1] 15:49:58
【讨论】:
如果您想从中进行真正的约会,请尝试以下操作。
strptime("154958", "%H%M%S")
默认为当天,因此如果今天是 2015 年 3 月 24 日,您将获得:
[1] "2015-03-24 15:49:58 CET"
【讨论】:
我会将其视为格式化输出:
formatC(as.integer("154958"),
big.mark = ":", big.interval = 2L)
#[1] "15:49:58"
【讨论】:
或者更简单(因为是时间戳,所以字符数是已知的)
paste(substr(x,1,2),substr(x,3,4),substr(x,5,6),sep=":")
【讨论】:
paste(strsplit(x, '(?<=\\d{2})(?=\\d{2})', perl=TRUE)[[1]], collapse=":")