Publi

Cómo convertir una cantidad de segundos a horas, minutos y segundos en Bash

photo-1415604934674-561df9abf539

El título del post lo dice claro. Imaginemos que tenemos un número grande, por ejemplo 58492, y que ese número son los segundos que ha tardado una tarea en realizarse, o el tiempo que ha pasado desde un evento determinado, pero a nosotros como humanos, este número no nos dice nada, lo entenderíamos mejor si lo expresamos como 16:14:52 como en todo, tenemos varias formas de hacerlo y voy a proponer dos.

Usando el comando date

La primera de ellas, me viene a la cabeza como más sencilla, ya que el mismo comando se encarga de hacaerlo, sólo tenemos que formatear la información de la manera debida. Por ejemplo:

$ date -u +%H:%M:%S –date=’@58492′

En este caso, le estamos diciendo que trabaje en GMT (-u), con esto, nos ahorramos que transforme la hora a la zona horaria en la que estamos actualmente, ya que puede variar el tiempo, y como estamos hablando de tiempo transcurrido, esto no depende de la zona horaria. Luego le pasamos el formato de salida con +»Formato» diciéndole cómo queremos que exprese la salida. Y por último la cantidad de segundos, precedido de arroba (@) para indicar que sólo son segundos.

Así podemos hacer también lo siguiente:

$ date -u +»%H horas, %M minutos y %S segundos» –date=’@58492′
16 horas, 14 minutos y 52 segundos

Aunque quedaría un poco raro cuando diga 1 horas, 0 minutos y 0 segundos en lugar de 1 hora. Eso sería mucho más elaborado, implicaría parsear la salida de date (con awk por ejemplo) y sería más trabajoso.

Una función para Bash

Pero también nos podemos crear una función específica para esto. Al fin y al cabo, se trata de hacer divisiones sobre la cantidad de segundos y desde hace años, Bash es muy bueno en matemáticas (si le pasamos la entrada como se la tenemos que pasar, y no le decimos nada raro.

1
2
3
4
5
6
7
8
function seconds_to_time()
{
    local TIME="$1"
    local h=$(($TIME/3600))
    local m=$((($TIME%3600)/60))
    local s=$(($TIME%60))
    printf "%02d:%02d:%02d\n" $h $m $s
}

Y luego la llamamos así:

$ seconds_to_time 58492
16:14:52

Lo malo, es que la función es específica para esto, y no hará nada extra (como hace time). Lo bueno es que podemos personalizar la salida como queramos (podemos meter sentencias condicionales para crear una salida compleja tipo «1 hora y 14 minutos». Además, llamar a esta función es mucho más rápido que hacerlo con date. Sólo decir que date implica una ejecución que es lento (carga en memoria, creación de proceso, cambios de contexto, etc, mientras que con la función no hay que hacer nada de eso, ya que no salimos del mismo proceso Bash que se encarga de interpretarlo. Además, tanto las operaciones matemáticas como printf son órdenes internas de Bash.

Foto principal: Ales Krivec

También podría interesarte....

There are 10 comments left Ir a comentario

  1. Pingback: Cómo convertir una cantidad de segundos a horas, minutos y segundos en Bash | PlanetaLibre /

  2. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    I’ve never been more excited to explore web slots. The biggest ones are calling. สล็อตเว็บใหญ่ที่สุด

  3. WilliamSEO /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Cool you record, the data is extremely salubrious further entrancing, I’ll give you an associate with my scene. pasar 123 slot

  4. WilliamSEO /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    I get a kick out of the chance to suggest only fine in addition to proficient data and realities, thus see it: 안전한 토토사이트

  5. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    The market needs more transparency regarding the durability of slots. สล็อตเว็บตรง แตกง่าย

  6. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    This is likewise a decent post which I truly appreciated perusing. It isn’t each day that I have the likelihood to see something like this.. เว็บรวมสล็อตทุกค่าย

  7. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Your websites facilitate all the more each else volume is so engaging further serviceable It chooses me occur for withdraw reprise. I will in a split second snatch your rss channel to remain educated of any updates. 대구맛집

  8. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    For genuine devotees of this string I will address is a free on the web! สล็อตโรม่า

  9. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Excellent .. Amazing .. I’ll bookmark your blog and take the feeds also…I’m happy to find so many useful info here in the post. we need work out more techniques in this regard. thanks for sharing. Pokdeng

  10. jsimitseo /
    Usando Google Chrome Google Chrome 121.0.0.0 en Windows Windows NT

    Goodness! Such an astounding and supportive post this is. I outrageously cherish it. It’s so great thus amazing. I am simply flabbergasted. I trust that you keep on doing your work like this later on moreover. concierge doctor

Leave a Reply