Quantcast
Channel: Planeta Código
Viewing all articles
Browse latest Browse all 2721

Poesía Binaria: Cómo convertir una cantidad de segundos a horas, minutos y segundos en Bash

$
0
0

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()
{
    localTIME="$1"
    localh=$(($TIME/3600))
    localm=$((($TIME%3600)/60))
    locals=$(($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

The post Cómo convertir una cantidad de segundos a horas, minutos y segundos en Bash appeared first on Poesía Binaria.


Viewing all articles
Browse latest Browse all 2721

Trending Articles


FORECLOSURE OF REAL ESTATE MORTGAGE


Girasoles para colorear


mayabang Quotes, Torpe Quotes, tanga Quotes


Tagalog Quotes About Crush – Tagalog Love Quotes


OFW quotes : Pinoy Tagalog Quotes


Long Distance Relationship Tagalog Love Quotes


Tropa Quotes


Best Crush Tagalog Quotes And Sayings 2017


“BAHAY KUBO HUGOT”


Vimeo 10.7.0 by Vimeo.com, Inc.


Pokemon para colorear


Sapos para colorear


Tagalog Love Quotes – Nagmamahal


Break up Quotes Tagalog Love Quote – Broken Hearted Quotes Tagalog


Patama Quotes : Tagalog Inspirational Quotes


Tagalog Quotes To Move on and More Love Love Love Quotes


5 Tagalog Relationship Rules


Long distances monthsary message tagalog


Re:Mutton Pies (lleechef)


Vimeo 10.7.1 by Vimeo.com, Inc.