Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert a time span in seconds to formatted time in shell

I have a variable of $i which is seconds in a shell script, and I am trying to convert it to 24 HOUR HH:MM:SS. Is this possible in shell?

like image 612
Darren Avatar asked Nov 16 '12 18:11

Darren


People also ask

How do I convert time to seconds in Bash?

The command date +%S will print the current amount of seconds.

How do you display time in shell?

Sample shell script to display the current date and time #!/bin/bash now="$(date)" printf "Current date and time %s\n" "$now" now="$(date +'%d/%m/%Y')" printf "Current date in dd/mm/yyyy format %s\n" "$now" echo "Starting backup at $now, please wait..." # command to backup scripts goes here # ...

How do you wait 30 seconds in Bash?

It is as easy as typing sleep N . This will pause your script for N seconds, with N being either a positive integer or a floating point number.


2 Answers

Here's a fun hacky way to do exactly what you are looking for =)

date -u -d @${i} +"%T" 

Explanation:

  • The date utility allows you to specify a time, from string, in seconds since 1970-01-01 00:00:00 UTC, and output it in whatever format you specify.
  • The -u option is to display UTC time, so it doesn't factor in timezone offsets (since start time from 1970 is in UTC)
  • The following parts are GNU date-specific (Linux):
    • The -d part tells date to accept the time information from string instead of using now
    • The @${i} part is how you tell date that $i is in seconds
  • The +"%T" is for formatting your output. From the man date page: %T time; same as %H:%M:%S. Since we only care about the HH:MM:SS part, this fits!
like image 82
sampson-chen Avatar answered Oct 11 '22 12:10

sampson-chen


Another approach: arithmetic

i=6789 ((sec=i%60, i/=60, min=i%60, hrs=i/60)) timestamp=$(printf "%d:%02d:%02d" $hrs $min $sec) echo $timestamp 

produces 1:53:09

like image 41
glenn jackman Avatar answered Oct 11 '22 10:10

glenn jackman