【问题标题】:How to express a decimal time in HH:MM如何用 HH:MM 表示十进制时间
【发布时间】:2020-06-25 18:54:08
【问题描述】:

我有一个十进制格式的时间:22,13 以小时为单位,我想在 R 中将其表示为 HH:MM。我的意思是,22:08(贬值秒数)

谁能帮帮我?

【问题讨论】:

    标签: r time format


    【解决方案1】:

    将字符串扫描成数字形式的s,除以24,以便我们可以将其转换为times 类(因为times 预计是一天的一小部分),将其四舍五入到分钟并删除尾随的@ 987654324@

    library(chron)
    
    x <- c("22,13", "5,20") # test data
    
    s <- scan(text = x, dec = ",", quiet = TRUE)
    sub(":00$", "", round(times(s/24), "min"))  ##
    ## [1] "22:08" "05:12"
    

    如果您更喜欢截断秒数而不是舍入到最接近的分钟数,请将标有 ## 的行中的 round 替换为 trunc 或将整行替换为:

    format(as.chron(s/24), format = "%H:%M")  # truncate
    

    转换回来

    如果y 是标记为## 的行的结果,则它们分别转换回times 类和小时数。我们在最后一行使用了round(..., 2) 来获得与原始输入相同的位数,但如果这不重要,可以省略。

    y <- c("22:08", "05:12")
    
    tt <- times(paste0(y, ":00"))
    tt
    ## [1] 22:08:00 05:12:00
    
    round(24 * as.numeric(tt), 2)
    ## [1] 22.13  5.20
    

    【讨论】:

      【解决方案2】:

      %02.0f 的语法是将值四舍五入为整数并使其始终为 2 个单位。因此,7.8 分钟将转换为字符"08"

      x <- c("22,13", "9,25", "7,8")
      
      sprintf("%02d:%02.0f",
              as.numeric(sub(",\\d+", "", x)),
              as.numeric(sub("\\d+,", "0.", x)) * 60)
      
      # [1] "22:08" "09:15" "07:48"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-19
        • 1970-01-01
        • 2021-11-15
        相关资源
        最近更新 更多