2012-06-13 30 views
12

He estado tratando de encontrar una forma sencilla de formatear la salida de difftime en HH: MM: SS.ms. Hasta ahora no he encontrado nada que me haya sorprendido.formato intervalo de tiempo para mostrar horas, minutos, segundos

Escribí la función siguiente que casi lo hace. La limitación es la presentación de los números como dígitos únicos significativos. por ejemplo, 2 horas, 3 minutos, 4.5 segundos se convierte en "2: 3: 4.5" en lugar de "02: 03: 04.5"

¿Alguien tiene una mejor sugerencia?

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

mira '? Sprintf' – GSee

+0

@GSee, sprintf es genial. Definitivamente lo usaré en el futuro. Muchas gracias. –

Respuesta

10

Además de @ comentario de GSEE, se puede utilizar una función como esta:

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

muchas gracias, eso es mucho mejor. Estoy un poco confundido por el '.' delante de 'POSIXct' así que tendré que leer un poco más, pero funciona de manera brillante. Soy bastante nuevo en R y realmente aprecio tu ayuda. –

+1

@ getting-there: es simplemente una función simple que construye un objeto 'POSIXct' a partir de un vector numérico. –

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

Este es el código. Pero este código transforma los datos en segundos, pero el resultado debe ser una cadena de tiempo.

Cuestiones relacionadas