首页 > 解决方案 > 计算小时之间的差异,不考虑日期

问题描述

我有一个带有时间戳的向量,格式为:

"12:00:00"

它是 24 小时格式,我没有与这些时间戳相关的日期。我想计算这些之间的时间差。

所以和之间的区别,12和和11 = 1之间的区别。2301 = 2

我想计算向量中的时间到给定时间的差,以便我得到一个具有时间差的向量。

数据:

head(x3)
[1] "12:00:00" "18:00:00" "21:00:00" "06:00:00" "00:00:00" "09:00:00"

如何解决这个问题?

标签: rdatetime

解决方案


如果您只对小时的绝对差异感兴趣并且时间戳格式是一致的,您可以这样做

absDif <- abs(as.numeric(substr(test_time[2], 1, 2)) - as.numeric(substr(test_time[1], 1, 2)))

如果您还需要分钟,首先生成数字时间列可能更方便,例如在循环中

numericTimestamps[i] <- as.numeric(substr(test_time[i], 1, 2) + 
       as.numeric(substr(test_time[i], 4, 5) / 60 + 
       as.numeric(substr(test_time[i], 7, 8) / 60 / 60

编辑以解决修改后的问题:

如果我说对了,那么您不是在寻找绝对差异,而是在考虑白班时的简单时间差异。在这种情况下,如下建议的使用 dateTime 对象可能更直接。如果您想坚持使用数字,您需要自己考虑日期变化,例如通过添加 if 条件:

absDif <- as.numeric(substr(test_time[2], 1, 2)) - as.numeric(substr(test_time[1], 1, 2))

# if the first is smaller than the second, there was most probably a shift in date
if(as.numeric(substr(test_time[2], 1, 2)) < as.numeric(substr(test_time[1], 1, 2))){

  # correct by 24 hours
  absDif <- as.numeric(substr(test_time[2], 1, 2)) - (as.numeric(substr(test_time[1], 1, 2)) + 24)
}

推荐阅读