2016-04-20 27 views

回答

5
format(strptime("084601","%H%M%S"),"%H:%M:%S") 

的作品,但你必須確保你有一個兩位數小時,例如:

x <- "84601" 

在任何前面加零5位數的數字串:

xx <- gsub("([0-9]{5})","0\\1",x) 

(或如@Frank在評論說,sprintf("%06d", x)會爲整數的工作...)

轉換:

format(strptime(xx,"%H%M%S"),"%H:%M:%S") 

(如果你不這樣做format()你會得到被填充到當前日期的日期 - 時間字符串...)

+1

假設OP一個整數開始(他們說),他們也可以添加像sprintf(「%06d」,84601L)的前導零「 – Frank

3

只是把它作爲一個字符串:

x <- 84601 
# index from end in case of extra hours digit 
y <- paste0(substr(x, 1, nchar(x)-4), ':', 
      substr(x, nchar(x)-3, nchar(x)-2), ':', 
      substr(x, nchar(x)-1, nchar(x))) 
y 
# [1] "8:46:01" 

或用正則表達式:

y <- gsub('(.?.)(..)(..)', '\\1:\\2:\\3', x) 
y 
# [1] "8:46:01" 

或用format(格式化數字,而不是時間):

y <- format(x, big.mark = ':', big.interval = 2L) 
y 
# [1] "8:46:01" 

如果你需要的實際時間類,chron::times是好的:

chron::times(y) 
# [1] 08:46:01 
+1

chron的替代方法是data.table中的ITime,例如'data.table :: as.ITime(sprintf(」%06d「,x)」, %H%M%S「)' – Frank