【问题标题】:Derive difference between two times in R [duplicate]导出R中两次之间的差异[重复]
【发布时间】:2020-01-09 05:06:22
【问题描述】:

我从一个API请求的输出中提取一个时间变量,输出格式如下。

> a
[1] "2019-09-06T09:03:14.938Z"

第一个目标是导出与Sys.time()的差异

> b<- Sys.time()
> b
[1] "2019-09-06 08:57:08 UTC"

我在运行基本的c = a-b 时遇到问题

> c<-a-b
Error in `-.POSIXt`(a, b) : can only subtract from "POSIXt" objects

当尝试将a 转换为POSIXT 对象时,我收到以下错误:

> c<-as.POSIXct.Date(a)
Error in unclass(x) * 86400 : non-numeric argument to binary operator

第二个目标是让代码等到时间差为正或为零。也许有人使用sys.sleep

【问题讨论】:

    标签: r datetime time utc


    【解决方案1】:

    在转换为POSIXct 对象时,您需要传递正确的format

    a <- as.POSIXct("2019-09-06T09:03:14.938Z", format = "%Y-%m-%dT%T")
    

    然后做

    b - a
    

    你也可以difftimeunits 参数并且可以接受"secs", "mins", "hours","days", "weeks"

    difftime(b, a, units = "mins")
    

    关于问题的第二部分不是很清楚,但是我们可以编写一个while 循环让代码“等待”直到时间差为正或 0。

    while(a > Sys.time()) { }
    

    【讨论】:

    • 太好了,感谢base 的实施。我将从您的建议开始,while
    • @GCGM 没问题。很高兴它有帮助。 :)
    【解决方案2】:

    使用lubridate将字符串转换为POSIXct对象,然后可以相减一个

    library(lubridate)
    as_datetime("2019-09-06 08:57:08 UTC") - as_datetime("2019-09-06T09:03:14.938Z")
    Time difference of -6.115633 mins
    
    

    回答您的第二个问题(关于 API 请求之间的等待)Sys.sleep() 非常适合此问题

    Sys.sleep(5) # sleeps 5 seconds
    

    【讨论】:

    • 谢谢。它完美地工作,但我更喜欢使用base 函数以避免在我的脚本中安装额外的包!
    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 2016-04-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多