首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算小时间的差额,不考虑日期

计算小时间的差额,不考虑日期
EN

Stack Overflow用户
提问于 2018-12-17 15:22:21
回答 3查看 90关注 0票数 0

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

"12:00:00"

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

所以1211 = 1之间的区别,2301 = 2之间的差异。

我想要计算从向量到给定时间的时间差,这样我就可以得到一个带有时间差的向量。

数据:

代码语言:javascript
复制
head(x3)
[1] "12:00:00" "18:00:00" "21:00:00" "06:00:00" "00:00:00" "09:00:00"

如何处理这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-17 15:33:01

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

代码语言:javascript
复制
absDif <- abs(as.numeric(substr(test_time[2], 1, 2)) - as.numeric(substr(test_time[1], 1, 2)))

如果您也需要会议记录,那么首先生成一个数字时间列可能更方便,例如在循环内部。

代码语言:javascript
复制
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条件:

代码语言:javascript
复制
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)
}
票数 2
EN

Stack Overflow用户

发布于 2018-12-17 16:21:45

我们假设

  1. 输入是hh:mm:ss格式的字符串,其中hh在00到23之间。
  2. 只应使用hh。
  3. 输出应该是小时作为一个数字。
  4. 从第一个小时减去第二个小时
  5. 如果第一个小时小于第二个小时,则添加24到#4

以上为问题中的两个例子提供了以下内容。不使用包装。

代码语言:javascript
复制
Diff <- function(t1, t2) {
  h1 <- as.numeric(sub(":.*", "", t1))
  h2 <- as.numeric(sub(":.*", "", t2))
  h1 - h2 + 24 * (h1 < h2)
}

Diff("12:00:00", "11:00:00")
## [1] 1

Diff("1:00:00", "23:00:00")
## [1] 2

如果我们希望计算下面所示的v"12:00:00"之间的差额,比如说:

代码语言:javascript
复制
v <- c("12:00:00", "18:00:00", "21:00:00", "06:00:00", "00:00:00", "09:00:00")
Diff(v, "12:00:00")
## [1]  0  6  9 18 12 21
票数 2
EN

Stack Overflow用户

发布于 2018-12-17 15:30:01

一个基本的R选项将是使用您的数据形成临时的日期时间,通过附加一些任意的日期。然后,使用strptimedifftime查找以小时为单位的差异:

代码语言:javascript
复制
t1 <- "12:00:00"
t2 <- "10:15:00"
date <- "2018-01-01"

as.numeric(difftime(strptime(paste(date, t1), "%Y-%m-%d %H:%M:%S"),
                    strptime(paste(date, t2), "%Y-%m-%d %H:%M:%S")))

[1] 1.75
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53818163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档