【问题标题】:Convert decimal into days, minutes hours and seconds in R在R中将十进制转换为天,分,小时和秒
【发布时间】:2016-06-01 03:54:15
【问题描述】:

如何将小数转换为天、小时、分钟和秒?

小数点将显示分钟数,我想将其转换为显示“X days, Y hours, Z minutes and W seconds”的字符串,或显示“DD:HH:MM:SS

我发现了一些类似的帖子,但没有一个是在 R 中完成的。

到目前为止,我的代码是:

seconds=55800
lengths=strftime(as.POSIXct(seconds, origin = Sys.Date(), tz = "UTZ"), format = "%d %H:%M:%S")

但是,我需要一个新的起源。因为 55800 秒是 15.5 小时,结果显示 19 天 15 小时 30 分钟,因为原点基于今天的日期(19 日)。我需要以某种方式创建一个通用起源。

【问题讨论】:

  • 请展示一个示例和预期输出
  • 做几个除法和乘法有那么复杂吗?
  • 我已经添加了我的代码,我知道问题是什么,只是不知道如何解决它。我之前没有包括它,因为我相信有一种更雄辩的方式是可能的。 @Tensibai - 不,不是,谁说是的?
  • 使用 UNIX 纪元作为你的起源,origin="1970-01-01"
  • @sym246 就您没有显示任何尝试而言,似乎您在询问之前甚至没有自己尝试过...现在更好了,TomNash 给了您正确的答案,使用正确的来源(用 strftime 表示,超过 31 天你会遇到问题)。

标签: r date datetime time


【解决方案1】:

lubridate 包有多种帮助器,可以方便地用于类似的用例。

> require(lubridate)
> seconds_to_period(55800)
[1] "15H 30M 0S"

【讨论】:

    【解决方案2】:

    问题说输入是分钟数,但代码以秒开头。我假设了分钟。

    1) 计算天数,然后将分钟转换为 POSIXct 并使用sprintf 生成字符串。没有使用任何包。

    # input
    mins <- 55800 / 60
    
    days <- mins %/% (24 * 60)
    ct <- as.POSIXct(60 * mins, origin = "1970-01-01", tz = "UTC") # POSIXct
    sprintf("%02d:%s", days, substring(ct, 12))
    
    ## [1] "00:15:30:00"
    

    2) 从上方使用 chron 和 days 会稍微短一些,并避免潜在的时区错误:

    library(chron)
    sprintf("%02d:%s", days, times(chron(mins / (24 * 60))))
    ## [1] "00:15:30:00"
    

    更新:固定/简化。已添加 (2)。

    【讨论】:

    • 我看到我的分钟/秒在原始帖子中令人困惑 - 我使用哪个并不重要。但是,5000 分钟等于 3 天 11 小时 20 分钟 - 不是 3 天 6 小时 20 分钟...(或者 55800 在最新编辑中不是 10 小时 30)
    • 已修复。 55800 秒是 930 分钟,也就是 15.5 小时。
    • 略有简化。
    【解决方案3】:
    # Original minutes vector
    minutes <- 14.64416
    
    # Get the number of whole minutes, save in `mins`
    mins <- floor(minutes)
    
    # Get the decimal from `minutes` and multiple by 60 to get
    # the number of seconds within a the minute. Save in `secs`
    secs <- round(minutes %% mins * 60, 0)
    
    # Paste them together in whatever format you would like
    paste0(mins, ":", secs)
    
    [1] "14:39"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2020-02-10
      • 2012-09-27
      相关资源
      最近更新 更多