2012-06-13 43 views
12

Tôi đã cố gắng tìm một cách đơn giản để định dạng đầu ra từ difftime thành HH: MM: SS.ms. Cho đến nay tôi đã không đi qua bất cứ điều gì mà tôi đã ngạc nhiên bởi.khoảng thời gian định dạng để hiển thị giờ, phút, giây

Tôi đã viết hàm bên dưới gần như vậy. Giới hạn là việc trình bày các con số dưới dạng các chữ số có nghĩa. ví dụ: 2hr, 3mins, 4.5secs trở thành "2: 3: 4.5" thay vì "02: 03: 04.5"

Có ai có đề xuất tốt hơn không?

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

xem '? Sprintf' – GSee

+0

@GSee, sprintf thật tuyệt. Tôi chắc chắn sẽ sử dụng nó trong tương lai. Cảm ơn rất nhiều. –

Trả lời

10

Ngoài @ bình luận GSee, bạn có thể sử dụng một chức năng như thế này:

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

cảm ơn bạn rất nhiều, điều đó đẹp hơn rất nhiều. Tôi hơi bối rối bởi '.' trước 'POSIXct' nên tôi sẽ phải đọc thêm, nhưng nó hoạt động rất tốt. Tôi khá mới với R và thực sự đánh giá cao sự giúp đỡ của bạn. –

+1

@ get-there: nó chỉ là một hàm đơn giản mà xây dựng một đối tượng 'POSIXct' từ một vector số. –

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

Đây là mã. Nhưng mã này biến đổi dữ liệu thành giây nhưng kết quả phải là một chuỗi thời gian.

Các vấn đề liên quan