标签: difftime

如何用ep_之前的time_t计算C++中的时差?

我想用我的简单程序做的是计算两个日期之间的秒差.

time_t referenceDate;
time_t dateNow = time(0);
struct tm referenceDateComponent = {0};
referenceDateComponent.tm_hour = 0;
referenceDateComponent.tm_min = 0;
referenceDateComponent.tm_sec = 0;
referenceDateComponent.tm_year = 89;
referenceDateComponent.tm_mon = 11;
referenceDateComponent.tm_mday = 31;
referenceDate = mktime(&referenceDateComponent);  
long seconds = difftime(dateNow, referenceDate);
Run Code Online (Sandbox Code Playgroud)

Whit应用程序上面的代码工作正常,但如果尝试设置tm.year负数(在1900年之前构建日期)mktime()函数返回-1

我知道该time_t类型只管理从1970年1月1日UTC开始的日期,根据文档:

由于历史原因,它通常被实现为表示自UTC时间1970年1月1日00:00(即,unix时间戳)以来经过的秒数的整数值.尽管库可以使用替代时间表示来实现此类型.

我知道还有Boost库,但对我来说不是一个有用的解决方案.

所以我的问题是,从1970年以前的日期开始,有什么办法可以在几秒钟内获得变化?

c++ time-t mktime difftime

5
推荐指数
2
解决办法
4588
查看次数

差异时间的分组平均值在 data.table 中失败

前言:

我在 difftime 值的 data.table 中有一个列,单位设置为天。我正在尝试创建另一个 data.table 总结值

dt2 <- dt[, .(AvgTime = mean(DiffTime)), by = Group]
Run Code Online (Sandbox Code Playgroud)

打印新的 data.table 时,我看到诸如

1.925988e+00 days
1.143287e+00 days
1.453975e+01 days
Run Code Online (Sandbox Code Playgroud)

我只想限制此列的小数位值(即不设置,options()除非我可以通过这种方式专门针对 difftime 值执行此操作)。当我尝试使用上述方法执行此操作时,已修改,例如

dt2 <- dt[, .(AvgTime = round(mean(DiffTime)), 2), by = Group]
Run Code Online (Sandbox Code Playgroud)

我只剩下 NA 值,基数round()format()函数都返回警告:

在 mean(DiffTime) 中:参数不是数字或逻辑。

奇怪的是,如果我对数字字段执行相同的操作,则运行没有问题。另外,如果我运行两行单独的代码,我可以完成我想要做的事情:

dt2 <- dt[, .(AvgTime = mean(DiffTime)), by = Group]
dt2[, AvgTime := round(AvgTime, 2)]
Run Code Online (Sandbox Code Playgroud)

可重现的例子:

library(data.table)
set.seed(1)
dt <- data.table(
  Date1 = 
    sample(seq(as.Date('2017/10/01'), 
               as.Date('2017/10/31'), 
               by="days"), 24, replace = …
Run Code Online (Sandbox Code Playgroud)

formatting r rounding data.table difftime

5
推荐指数
1
解决办法
467
查看次数

具有来自其他列的先前非NA值的difftime

我有一个3个变量的数据框:POSIXct对象 - time,数字 - RRR和因子 - he.RRR液体降水量和he水文事件数在哪里,这里的时间对应于洪水事件的开始.

df <- structure(list(time = structure(c(1396879200, 1396922400, 1396976400, 
                                        1397008800, 1397095200, 1397332800, 1397354400, 1397397600, 1397451600, 
                                        1397484000, 1397527200, 1397786400, 1397959200, 1398002400, 1398024000, 
                                        1398132000, 1398175200, 1398218400, 1398261600, 1398369600, 1398466800, 
                                        1398477600, 1398520800, 1398564000, 1398607200, 1398747600, 1398780000, 
                                        1398909600, 1398952800, 1398974400, 1398996000),
                                      class = c("POSIXct", "POSIXt"),
                                      tzone = ""),
                     RRR = c(NA, 2, NA, 4, NA, NA, 0.9, 3, 
                             NA, 0.4, 11, NA, 0.5, 1, NA, 13, 4, 0.8, 0.3, NA, NA, 8, …
Run Code Online (Sandbox Code Playgroud)

r difftime

5
推荐指数
1
解决办法
98
查看次数

How do you extract the time unit when using difftime()?

I'm currently running a for loop code and at the end of each loop I am measuring the duration of the loop and print a message that tells the user how long did the loop take.

To get the duration I'm using

duration <- difftime(end_time, start_time) 
Run Code Online (Sandbox Code Playgroud)

And this is how I print the statement

print(paste("Loop", i, "took", duration, "to run.")). 
Run Code Online (Sandbox Code Playgroud)

The problem is the duration of each loop may range from 30 seconds to 1 hour. Putting the duration inside …

time r difftime

5
推荐指数
1
解决办法
922
查看次数

如何获得两个日期字符串之间的差异(以分钟为单位)?

我有两个约会:

date1 <- '2015-10-05T20:57:00.000'
date2 <- '2015-10-05T22:43:00.000'
Run Code Online (Sandbox Code Playgroud)

1)我需要知道分钟的差异2)我还要提取年,月,日和小时.

这就是我尝试解决这些任务的方法:

1)time <- difftime(date1,date2,units="mins") #结果为0而不是106.

2)我想要"lubridate",但不知道如何将它应用于我的格式.

r date difftime

4
推荐指数
1
解决办法
6653
查看次数

How to format a difftime object to a string with HH:MM:SS

I think this is quite a simple question, I am however incapable of solving it, so any help would be greatly appreciated.

I have a difftime object, generated as follows:

> duration <- difftime(end_time, start_time)
> duration
Time difference of 15.74106 secs
Run Code Online (Sandbox Code Playgroud)

The end_time and start_time objects are POSIXct objects and look like this:

> c(start_time, end_time)
[1] "2018-07-08 20:07:56 EDT" "2018-07-08 20:08:12 EDT"
Run Code Online (Sandbox Code Playgroud)

I need duration to be displayed in HH:MM:SS format - i.e. like this, in a string: …

r difftime

4
推荐指数
2
解决办法
517
查看次数

计算不同行的列之间的时间差(difftime)

我有不同工作的"开始"和"结束"时间数据,按"所有者"分组:

Data <- data.frame(
  job = c(1, 2, 3, 4, 5),
  owner = c("name1", "name2", "name1", "name1", "name2"),
  Start = as.POSIXct(c("2015-01-01 15:00:00", "2015-01-01 15:01:00", "2015-01-01 15:13:00", "2015-01-01 15:20:00", "2015-01-01 15:39:02"), format="%Y-%m-%d %H:%M:%S"),
  End =   as.POSIXct(c("2015-01-01 15:11:11", "2015-01-01 15:17:21", "2015-01-01 15:17:00", "2015-01-01 15:31:21", "2015-01-01 15:40:11"), format="%Y-%m-%d %H:%M:%S")
)
Run Code Online (Sandbox Code Playgroud)

对于每个所有者,我想计算每个所有者的作业之间的空闲时间,即一个作业的"结束"时间与下一个作业的"开始"时间之间的差异.

如何使用difftime()不同列中的特定行和时间之间的时间差来计算?

结果应如下所示:

job, owner, idletime
1, name1, NA
2, name2, NA
3, name1, 1.816667  # End of row 1 minus Start of row 3
4, name1, 3.0       # End of …
Run Code Online (Sandbox Code Playgroud)

datetime r posixct difftime

2
推荐指数
1
解决办法
1187
查看次数

两次观察之间的平均秒数

我有一个来自xts对象的不规则时间索引.我需要找到两次观察之间平均秒数.这是我的样本数据:

dput(tt)
structure(c(1371.25, NA, 1373.95, NA, NA, 1373, NA, 1373.95, 
1373.9, NA, NA, 1374, 1374.15, NA, 1374, 1373.85, 1372.55, 1374.05, 
1374.15, 1374.75, NA, NA, 1375.9, 1374.05, NA, NA, NA, NA, NA, 
NA, NA, 1375, NA, NA, NA, NA, NA, 1376.35, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, 1376.25, NA, 1378, 1376.5, NA, NA, NA, 1378, 
1378, NA, NA, 1378.8, 231.9, 231.85, NA, 231.9, 231.85, 231.9, 
231.8, 231.9, 232.6, 231.95, 232.35, 232, 232.1, 232.05, …
Run Code Online (Sandbox Code Playgroud)

r xts difftime

2
推荐指数
1
解决办法
286
查看次数

如何计算R中变量行之间的时间差?

我希望根据开始工作时间和结束工作时间计算不同组的时间差异。我如何告诉 R 根据组中的标签计算两行之间的差异时间?下面是一个示例数据集:

library(data.table)


latemail <- function(N, st="2012/01/01", et="2012/02/01") {
  st <- as.POSIXct(as.Date(st))
  et <- as.POSIXct(as.Date(et))
  dt <- as.numeric(difftime(et,st,unit="sec"))
  ev <- sort(runif(N, 0, dt))
  rt <- st + ev

}

#create our data frame
set.seed(42)
dt = latemail(20)
work = setDT(as.data.frame(dt))
work[,worker:= stringi::stri_rand_strings(2, 5)]  
work[,dt:= as.POSIXct(as.character(work$dt), tz = "GMT")]
work[,status:=NA]

#order
setorder(work, worker, dt)

#add work times
work$status[1] = "start"
work$status[5] = "end"
work$status[6] = "start"
work$status[10] = "end"
work$status[11] = "start"
work$status[15] = "end"
work$status[16] = "start"
work$status[20] = …
Run Code Online (Sandbox Code Playgroud)

r data.table difftime

2
推荐指数
1
解决办法
2977
查看次数

如何在 ggplot2 中将 difftime 格式化为 hh:mm?

我想用 ggplot2 显示 difftime 数据,并且我希望刻度格式为hh:mm.

library(ggplot2)  

a= as.difftime(c("0:01", "4:00"), "%H:%M", unit="mins")
b= as.difftime(c('0:01', "2:47"), "%H:%M", unit="mins")

ggplot(data=NULL, aes(x=b, y=a)) + geom_point(shape=1) +    
                  scale_x_time(labels = date_format("%H:%M"), 
                               breaks = "1 hour")
Run Code Online (Sandbox Code Playgroud)

但我收到以下警告:

Don't know how to automatically pick scale for object of type difftime. Defaulting to continuous.
Warning message:
In structure(as.numeric(x), names = names(x)) : NAs introduced by coercion
Run Code Online (Sandbox Code Playgroud)

这是一个图表: 在此处输入图片说明

更新: 我的例子太小了,我还需要能够显示负差异,所以这将是更好的数据:

a= as.difftime(c(-60, -4*60),  unit="mins")
b= as.difftime(c(-60, 2*60+47), unit="mins")
ggplot(data=NULL, aes(x=b, y=a)) + geom_point(shape=1)
Run Code Online (Sandbox Code Playgroud)

r ggplot2 difftime

2
推荐指数
1
解决办法
1298
查看次数

C中两个日期之间的秒数差异

我想计算两个日期之间的秒数差异,但结果是0.

这是代码:

time_t=time(NULL);
struct tm * timeNow=localtime();
time_t start=mktime(&*timeNow);
time_t end=mktime(&*recordFind->timeInserted);

double seconds=difftime(start,end);
Run Code Online (Sandbox Code Playgroud)

recordFind->timeInserted 是的,因为我打印他的成员并且没问题,但是当我打印秒数是0.000000;

c algorithm time-t time.h difftime

1
推荐指数
1
解决办法
1818
查看次数

Calulcate在一列时间戳上使用difftime运行时间差

如何计算两个连续时间戳行的时间差(以分钟为单位),并将结果添加到新列中.

我试过这个:

data$hours <- as.numeric(floor(difftime(timestamps(data), (timestamps(data)[1]), units="mins")))
Run Code Online (Sandbox Code Playgroud)

但只能从零时间开始获得差异.

添加了我想要添加的'mins'列的示例数据

timestamps                        mins
2013-06-23 00:00:00               NA
2013-06-23 01:00:00               60
2013-06-23 02:00:00               60
2013-06-23 04:00:00              120
Run Code Online (Sandbox Code Playgroud)

r difftime

0
推荐指数
1
解决办法
2869
查看次数

如何计算R中一列中两个日期之间的天数

我有以下两个数据框:

Date <- seq(as.Date("2013/1/1"), by = "day", length.out = 17)
x <-data.frame(Date)
x$discharge <- c("1000","1100","1200","1300","1400","1200","1300","1300","1200","1100","1200","1200","1100","1400","1200","1100","1400")
x$discharge <- as.numeric(x$discharge)
Run Code Online (Sandbox Code Playgroud)

Date2 <- c("2013-01-01","2013-01-08","2013-01-12","2013-01-17")
y <- data.frame(Date2)
y$concentration <- c("1.5","2.5","1.5","3.5")
y$Date2 <- as.Date(y$Date2)
y$concentration <- as.numeric(y$concentration)
Run Code Online (Sandbox Code Playgroud)

我试图用以下代码计算从一个日期到另一个日期的天数:

y %>%
    mutate(BETWEEN0=as.numeric(difftime(Date2,lag(Date2,1))),BETWEEN=ifelse(is.na(BETWEEN0),0,BETWEEN0))%>%
    select(-BETWEEN0)
Run Code Online (Sandbox Code Playgroud)

导致:

Date2         concentration BETWEEN
1 2013-01-01           1.5       0
2 2013-01-08           2.5       7
3 2013-01-12           1.5       4
4 2013-01-17           3.5       5
Run Code Online (Sandbox Code Playgroud)

但是,我需要的是在第一个日期等旁边打印的两个日期之间计算的天数,例如

Date2         concentration BETWEEN
1 2013-01-01           1.5       7
2 2013-01-08           2.5       4
3 2013-01-12           1.5       5
4 2013-01-17           3.5       0
Run Code Online (Sandbox Code Playgroud)

这意味着从2013-01-01到2013-01-07是7天,从2013-01-08到2013-01-12是4天等.

r difftime

0
推荐指数
1
解决办法
883
查看次数

标签 统计

difftime ×13

r ×11

data.table ×2

time-t ×2

algorithm ×1

c ×1

c++ ×1

date ×1

datetime ×1

formatting ×1

ggplot2 ×1

mktime ×1

posixct ×1

rounding ×1

time ×1

time.h ×1

xts ×1