es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

lubridate – obtener horas y minutos a partir de horas decimales

Tengo horas decimales en formato 245.85 que equivalen a 245:51:00 en formato [hh]:mm:ss.

Quiero transformar las horas decimales en formato hh:mm, pero ¿cómo lo hago?

El cálculo original que produce 245.85 es:

“`{r}
library(lubridate)
time_length(hm("7 27")*33,unit = "hours")

<pre><code><br />Lo que quiero es <code>245:51</code> o <code>245:51:00</code><br>
Si uso as.period también obtengo los días, como en el siguiente ejemplo:

“`{r}
as.period(dhours(time_length(hm(“7 27″)*33,”hours”)))
[1] “10d 5H 51M 0S”

Mi objetivo es multiplicar horas y minutos (por ejemplo, 7:27) por un número entero arbitrario (por ejemplo, 33) y obtener el resultado en formato hh:mm, evitando los días (como en el ejemplo de as.period). Digamos que si una tarea lleva 7 horas y 27 minutos y nos dan 33 tareas de ese tipo para hacer en un año, debería llevarme aproximadamente esta cantidad de horas (y minutos) de trabajo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir horas decimales al formato hh:mm, puedes utilizar el siguiente código:

    “`{r}
    decimal_hours <- 245.85

    hours <- floor(decimal_hours)
    minutes <- round((decimal_hours – hours) * 60)

    sprintf(“%02d:%02d”, hours, minutes)


    Esto te dará la salida en formato `hh:mm`, que en este caso será `245:51`. Si deseas incluir los segundos, puedes modificar el código de la siguiente manera: ```{r} decimal_hours <- 245.85 hours <- floor(decimal_hours) minutes <- round((decimal_hours - hours) * 60) seconds <- round(((decimal_hours - hours) * 60 - minutes) * 60) sprintf("%03d:%02d:%02d", hours, minutes, seconds)

    Esto te dará la salida en formato hh:mm:ss, que en este caso será 245:51:00.

    Para incorporar esto en tu cálculo, puedes modificar el código de la siguiente manera:

    “`{r}
    library(lubridate)

    work_time <- hm(“7 27”) * 33
    decimal_hours <- time_length(work_time, unit = “hours”)

    hours <- floor(decimal_hours)
    minutes <- round((decimal_hours – hours) * 60)

    sprintf(“%02d:%02d”, hours, minutes)
    “`

    Esto te dará el tiempo total de trabajo en formato hh:mm, sin contar los días.

Comments are closed.