【问题标题】:Convert numeric values to timespans format [duplicate]将数值转换为时间跨度格式[重复]
【发布时间】:2019-01-18 17:38:22
【问题描述】:

我有一个以秒为单位的值列表

seconds=c(139765, 319817, 524729, 1491,  211831, 27571, 15254,  427546, 314016, 9372)

我想将这些持续时间转换为时间跨度格式,例如:hh:mm:ss

我尝试过使用dseconds,但显示给我:

> dseconds(seconds)
 [1] "139765s (~1.62 days)"   "319817s (~3.7 days)"    "524729s (~6.07 days)"  
 [4] "1491s (~24.85 minutes)" "211831s (~2.45 days)"   "27571s (~7.66 hours)"  
 [7] "15254s (~4.24 hours)"   "427546s (~4.95 days)"   "314016s (~3.63 days)"  
[10] "9372s (~2.6 hours)" 

我怎样才能做到这一点? thx 在高级

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我们可以手动计算所有三个部分,类似于this 答案:

    sprintf("%02d:%02d:%02d", x %/% 3600, (x %% 3600) %/% 60, x %% 60)
    #  [1] "38:49:25"  "88:50:17"  "145:45:29" "00:24:51"  "58:50:31"  "07:39:31" 
    #  [7] "04:14:14"  "118:45:46" "87:13:36"  "02:36:12" 
    

    因为一小时有 3600 秒,x %/% 3600 给出完整小时数,(x %% 3600) %/% 60 给出剩余时间的完整分钟数,而x %% 60 是剩余秒数。

    【讨论】:

    • 因为有些持续时间超过 100 小时,所以我尝试以这种方式扩展以设置格式 DD:HH:MM:SS,但我失败了:sprintf("%02d:%02d:%02d:%02d", seconds %/% 25200, (seconds %/% 25200), seconds %/% 3600, seconds %/% 60, seconds %% 60)
    • @ArmandoGonzálezDíaz,在这种情况下,您的问题与用于关闭它的问题完全相同。我的答案的类似物变得有点太冗长了:sprintf("%02d:%02d:%02d:%02d", x %/% (3600 * 24), (x %% (3600 * 24)) %/% 3600, (x %% 3600) %/% 60, x %% 60)
    • 我做到了:sprintf("%02d:%02d:%02d:%02d", seconds %/% 86400, (seconds %% 86400) %/% 3600, (seconds %% 3600) %/% 60, seconds %% 60)
    • @ArmandoGonzálezDíaz,是的,这与我的评论相同。
    猜你喜欢
    • 2010-10-24
    • 2022-11-03
    • 2019-06-25
    • 2019-07-04
    • 1970-01-01
    • 2014-01-29
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多