2012-06-13 60 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") 

这是代码。但是这段代码将数据转换为秒,但结果应该是时间字符串。

相关问题