更好地表示日期时间差异
Better representation of datetime differences
如何将我的结果(时差)转换为以下三种格式(最好使用lubridate
)
HH:MM
HH:MM:SS
MM:SS
library(lubridate)
time_1 <- ymd_hms("2021-01-01 12:00:00")
time_2 <- ymd_hms("2021-01-01 12:12:36")
time_3 <- ymd_hms("2021-01-01 14:25:45")
time_diff_32 <- time_3 - time_2
time_diff_31 <- time_3 - time_1
time_diff_21 <- time_2 - time_1
不是直接执行 -
,而是使用 difftime
和 units
这将对输出单位有更多控制,即如果我们将其转换为 sec
onds,然后我们可以使用 lubridate
中的 seconds_to_period
,然后提取各种组件以创建 format
,如预期输出
library(lubridate)
out <- seconds_to_period(difftime(time_3, time_2, units = 'sec'))
sprintf('%02d:%02d', out@hour, second(out))
sprintf('%02d:%02d:%02d', out@hour, out@minute, second(out))
sprintf('%02d:%02d', out@minute, second(out))
如果对象不止一个,我们可以创建一个函数来复用
f1 <- function(time1, time2, format = "HH:MM") {
tmp <- lubridate::seconds_to_period(difftime(time2, time1, units = 'sec'))
switch(format,
"HH:MM" = sprintf('%02d:%02d', tmp@hour, second(tmp)),
"HH:MM:SS" = sprintf('%02d:%02d:%02d', tmp@hour,
tmp@minute, second(tmp)),
"MM:SS" = sprintf('%02d:%02d', tmp@minute,
second(tmp)))
}
-测试
> f1(time_2, time_3)
[1] "02:09"
> f1(time_2, time_3, format = "HH:MM:SS")
[1] "02:13:09"
> f1(time_2, time_3, format = "MM:SS")
[1] "13:09"
如何将我的结果(时差)转换为以下三种格式(最好使用lubridate
)
HH:MM
HH:MM:SS
MM:SS
library(lubridate)
time_1 <- ymd_hms("2021-01-01 12:00:00")
time_2 <- ymd_hms("2021-01-01 12:12:36")
time_3 <- ymd_hms("2021-01-01 14:25:45")
time_diff_32 <- time_3 - time_2
time_diff_31 <- time_3 - time_1
time_diff_21 <- time_2 - time_1
不是直接执行 -
,而是使用 difftime
和 units
这将对输出单位有更多控制,即如果我们将其转换为 sec
onds,然后我们可以使用 lubridate
中的 seconds_to_period
,然后提取各种组件以创建 format
,如预期输出
library(lubridate)
out <- seconds_to_period(difftime(time_3, time_2, units = 'sec'))
sprintf('%02d:%02d', out@hour, second(out))
sprintf('%02d:%02d:%02d', out@hour, out@minute, second(out))
sprintf('%02d:%02d', out@minute, second(out))
如果对象不止一个,我们可以创建一个函数来复用
f1 <- function(time1, time2, format = "HH:MM") {
tmp <- lubridate::seconds_to_period(difftime(time2, time1, units = 'sec'))
switch(format,
"HH:MM" = sprintf('%02d:%02d', tmp@hour, second(tmp)),
"HH:MM:SS" = sprintf('%02d:%02d:%02d', tmp@hour,
tmp@minute, second(tmp)),
"MM:SS" = sprintf('%02d:%02d', tmp@minute,
second(tmp)))
}
-测试
> f1(time_2, time_3)
[1] "02:09"
> f1(time_2, time_3, format = "HH:MM:SS")
[1] "02:13:09"
> f1(time_2, time_3, format = "MM:SS")
[1] "13:09"