计算日期/时间差,返回y:m:d h:m:s

时间:2017-12-13 10:26:02

标签: r

给出两个日期/时间:

make.unique(strings, sep="")

如何计算从一个到另一个的差异,并作为输出返回:

dt_1 <- lubridate::ymd_hms("2016:08:26 11:29:07")
dt_2 <- lubridate::ymd_hms("2016:07:29 09:29:00")

使用rubridate方法:

> "0:0:28 2:0:7"      # 28 days, 2 hours, and 7 seconds difference

返回:

dt_1 - dt_2

如何将此输出转换为 y:m:d h:m:s 格式?我已经搜查了,但没有运气!

提前致谢。

更新<!/强>

@Sotos下面描述的解决方案似乎并不是很有效。使用代码:

> Time difference of 28.08341 days

R返回负数日! &#34; 3:0:-1 23:0:0&#34;

对于我的生活,我无法弄清楚为什么会这样,以及如何避免它。正确的答案应该是&#34; 2:11:30 23:0:0&#34; (或2年,11个月,30天,23小时,0分钟,0秒)。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

对于那些感兴趣的人。运行:

将返回所需的输出
paste(
 paste(
  year(as.period(int_diff(c(dt_2, dt_1)))),
  month(as.period(int_diff(c(dt_2, dt_1)))),
  day(as.period(int_diff(c(dt_2, dt_1)))),
 sep = ":"),
 paste(
  hour(as.period(int_diff(c(dt_2, dt_1)))),
  minute(as.period(int_diff(c(dt_2, dt_1)))),
  second(as.period(int_diff(c(dt_2, dt_1)))),
 sep = ":"),
sep = " ")

请注意,较早的日期/时间应始终先行。

答案 1 :(得分:0)

您可以使用as.period将数字转换为句点。从文件中,

  

as.period将Interval,Duration,difftime和数字类对象更改为具有指定单位的Period类对象

所以你只需要在as.period中包装所有内容,即

lubridate::as.period(dt_1 - dt_2)
#[1] "28d 2H 0M 7S"