Jörgs Webnotizen

In der Bash Sekunden umrechnen in Stunden, Minuten und Sekunden

Ein bash Script gibt die Differenz einer Laufzeit zur Mindestlaufzeit in Sekunden aus. Eine negative Zahl zeigt an, wieviele Sekunden bis zur Mindestlaufzeit noch vergehen müssen, eine positive Zahl, um wieviele Sekunden diese bereits überschritten wurde. Nun soll das Ergebnis stattdessen schön im Format hh:mm:ss ausgegeben werden.

Auf stackoverflow.com findet man bereits einige Lösungsansätze. Mit date würde ich nicht operieren, da dabei keine Zeitspanne, sondern eine Uhrzeit ausgegeben wird, was man spätestens dann bemerkt, wenn die Laufzeit mehr als 24 Stunden beträgt. Die anderen Lösungen errechnen die Werte mit Division und Modulus und geben sie mithilfe von printf im korrekten Format aus. So bin ich auch bei der Erstellung meiner Funktion vorgegangen, wobei diese auch noch ein negatives Vorzeichen berücksichtigen kann:


sec_to_time() {
    local seconds=$1
    local sign=""
    if [[ ${seconds:0:1} == "-" ]]; then
        seconds=${seconds:1}
        sign="-"
    fi
    local hours=$(( seconds / 3600 ))
    local minutes=$(( (seconds % 3600) / 60 ))
    seconds=$(( seconds % 60 ))
    printf "%s%02d:%02d:%02d" "$sign" $hours $minutes $seconds
}

Ein etwaiges Minus vor der Sekundenzahl wird zuerst entfernt und nach der Umrechnung wieder vorne angefügt.

Folgende Aufrufe:


sec_to_time 42
echo
sec_to_time -4242
echo
sec_to_time 424242
echo

… erzeugen dann diese Ausgabe:

00:00:42
-01:10:42
117:50:42

Tags: Bash