首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与as.difftime不一致

与as.difftime不一致
EN

Stack Overflow用户
提问于 2018-07-24 13:28:08
回答 1查看 879关注 0票数 0

我可以将包含小时、分钟或秒规格的字符串转换为difftime

代码语言:javascript
复制
> as.difftime("12 h", "%H")
Time difference of 12 hours
> as.difftime("12 m", "%M")
Time difference of 12 mins
> as.difftime("12 s", "%S")
Time difference of 12 secs

但是我不能用一个星期的规范来完成,因为没有合适的格式…,尽管"weeks"difftime的一个合法单位

代码语言:javascript
复制
> as.difftime("12 w", "%…")

我是不是忽略了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 08:40:56

罗兰指出:

过了几个小时就不管用了。…很明显,如果你研究了密码。相关部分是 衍射时间(strptime(tim,format = format),strptime("0:0:0",format = "%X"),units = units) 。如果只为strptime指定时间,则它将添加当前日期。

实际上,研究R控制台中的代码是很容易的。

代码语言:javascript
复制
> as.difftime
function (tim, format = "%X", units = "auto") 
{
    if (inherits(tim, "difftime")) 
        return(tim)
    if (is.character(tim)) {
        difftime(strptime(tim, format = format), strptime("0:0:0", 
            format = "%X"), units = units)
    }
    else {
        if (!is.numeric(tim)) 
            stop("'tim' is not character or numeric")
        if (units == "auto") 
            stop("need explicit units for numeric conversion")
        if (!(units %in% c("secs", "mins", "hours", "days", "weeks"))) 
            stop("invalid units specified")
        .difftime(tim, units = units)
    }
}

问题的关键是,strptime的使用会导致给予as.difftime的时间间隔字符串被视为时间点,从该时间字符串中减去当前的0h。由于各种原因,具有字符串的as.difftime在几天或几周内无法使用,例如,strptime不接受0天的值,尽管它作为间隔是完全有效的。

对于R-devel邮件列表的评论请求并没有引起广泛的回应。(我通过私人邮件从Emil Bode那里收到了一些宝贵的想法,因此我不会在这里复制。)因此,我将不建议对as.difftime进行更改,也因为更改它会导致R版本之间的差异。

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

https://stackoverflow.com/questions/51499883

复制
相关文章

相似问题

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