我想标题说明了一切:我有一对用Sys.time()
生成的POSIX时间对象,我希望以一致的方式显示差异。我预计时间会从毫秒级到天数不等,但无法找到以difftime
格式显示DD:HH:MM:SS:mm
输出的方法。
任何简洁的R方法(理想情况下没有包)?
答案 0 :(得分:6)
帖子的主题和内容要求不同的格式,所以我们假设帖子正文中的那个是期望的,即DD:HH:MM:SS。
假设输入x
必须是秒的向量或difftime对象:
Fmt <- function(x) UseMethod("Fmt")
Fmt.difftime <- function(x) {
units(x) <- "secs"
x <- unclass(x)
NextMethod()
}
Fmt.default <- function(x) {
y <- abs(x)
sprintf("%s%02d:%02d:%02d:%02d",
ifelse(x < 0, "-", ""), # sign
y %/% 86400, # days
y %% 86400 %/% 3600, # hours
y %% 3600 %/% 60, # minutes
y %% 60 %/% 1) # seconds
}
# test
now <- Sys.time()
now100 <- now + 100
Fmt(now100 - now)
## [1] "00:00:01:40"
Fmt(now - now100)
## "-00:00:01:40"