2012-06-13 110 views
12

我一直在試圖找到一個簡單的方法來格式化輸出從difftime到HH:MM:SS.ms。到目前爲止,我還沒有遇到任何令我驚訝的事情。格式時間跨度顯示小時,分鐘,秒

我寫了下面的函數差不多。限制是將數字表示爲重要的單個數字。例如2小時,3分鐘,4.5秒變成「2:3:4.5」而不是「02:03:04.5」

有沒有人有更好的建議?

format.timediff <- function(start_time) { 
    diff = as.numeric(difftime(Sys.time(), start_time, units="mins")) 
    hr <- diff%/%60 
    min <- floor(diff - hr * 60) 
    sec <- round(diff%%1 * 60,digits=2) 

    return(paste(hr,min,sec,sep=':')) 
} 
+1

看看'?sprintf' – GSee

+0

@看吧,sprintf很棒。我一定會在將來使用它。非常感謝。 –

回答

10

除了@ GSEE的評論,你可以使用這樣的函數:

f <- function(start_time) { 
    start_time <- as.POSIXct(start_time) 
    dt <- difftime(Sys.time(), start_time, units="secs") 
    # Since you only want the H:M:S, we can ignore the date... 
    # but you have to be careful about time-zone issues 
    format(.POSIXct(dt,tz="GMT"), "%H:%M:%S") 
} 
f(Sys.Date()) 
+1

非常感謝,這是更好。我對''有點困惑。在'POSIXct'的前面,所以我不得不做更多的閱讀,但它的工作出色。我對R相當陌生,非常感謝你的幫助。 –

+1

@ getting-there:它只是一個簡單的函數,它從數字向量構造一個「POSIXct」對象。 –

0
Merge_Charge_Point$Duration<- difftime(Merge_Charge_Point$EndConnectionDateTime, Merge_Charge_Point$StartConnectionDateTime, units="secs") 

這是代碼。但是這段代碼將數據轉換爲秒,但結果應該是時間字符串。

相關問題