web-dev-qa-db-fra.com

Conversion des secondes en jours: heures: minutes: secondes

Je veux convertir les secondes en heures minutes et secondes en R .

Exemple

86400seconds-1day

gmdate("d H:i:s",86400)

C'est comme ça que j'ai essayé.

24
surendra

Vous pouvez essayer

library(lubridate)
seconds_to_period(86400)
#[1] "1d 0H 0M 0S"

seconds_to_period(48000)
#[1] "13H 20M 0S"

Si vous devez format

td <- seconds_to_period(86400)
sprintf('%02d %02d:%02d:%02d', day(td), td@hour, minute(td), second(td))
#[1] "01 00:00:00"

S'il s'étend sur >99 journées,

td <- seconds_to_period(1e7)
sprintf('%03d %02d:%02d:%02d', day(td), td@hour, minute(td), second(td))
#[1] "115 17:46:40"
53
akrun

En utilisant la base R, les éléments suivants devraient fonctionner:

dhms <- function(t){
    paste(t %/% (60*60*24) 
         ,paste(formatC(t %/% (60*60) %% 24, width = 2, format = "d", flag = "0")
               ,formatC(t %/% 60 %% 60, width = 2, format = "d", flag = "0")
               ,formatC(t %% 60, width = 2, format = "d", flag = "0")
               ,sep = ":"
               )
         )
}

> dhms(86400)
[1] "1 00:00:00" 
> dhms(48000)
[1] "0 13:20:00"
> dhms(1e7)
[1] "115 17:46:40"
> dhms(c(86400, 48000, 1e7))
[1] "1 00:00:00"   "0 13:20:00"   "115 17:46:40"
4
the_10th_letter_x2

Cela fonctionne également en utilisant seconds.to.hms de kimisc, mais pas aussi élégant que la réponse de @ akrun:

library(kimisc)
library(dplyr)
library(stringr)

HMS = seconds.to.hms(86400) 

HMS = seconds.to.hms(48000) 

HMS = seconds.to.hms(1e7) 

HMS %>%
  str_extract("^\\d+") %>%
  as.numeric() %>%
  {paste(.%/%24, .%%24)} %>%
  str_replace(HMS, "^\\d+", .)

Résultat:

[1] "1 0:00:00"

[1] "0 13:20:00"

[1] "115 17:46:40"
0
avid_useR