Reputation: 787
I currently have the variables below and want to know how much time elapsed in seconds. So CURRENT_TIME - TEST_START
TEST_START=$(date '+%d/%m/%Y %H:%M:%S')
sleep 4
CURRENT_TIME=$(date '+%d/%m/%Y %H:%M:%S')
I tried below, but keep getting illegal action
START_IN_SECONDS=$(date --date "$(TEST_START)" +%s)
This is in Mac.
Upvotes: 1
Views: 4180
Reputation: 780723
First, the syntax for expanding variables is $variable
or ${variable}
, not $(variable)
.
Second, date
doesn't know how to parse dates that are in %d/%m/%Y
format. When the date uses slashes, it expects it to be %m/%d/%Y
. So change your first two lines to use the correct format.
TEST_START=$(date '+%m/%d/%Y %H:%M:%S')
sleep 4
CURRENT_TIME=$(date '+%m/%d/%Y %H:%M:%S')
START_IN_SECONDS=$(date --date "$TEST_START" +%s)
CURRENT_IN_SECONDS=$(date --date "$CURRENT_TIME" +%s)
diff=$((CURRENT_IN_SECONDS - START_IN_SECONDS))
echo $diff
Of course, you could just set the xxx_IN_SECONDS
variables directly with +%s
instead of parsing formatted dates:
START_IN_SECONDS=$(date +%s)
sleep 4
CURRENT_IN_SECONDS=$(date +%s)
Upvotes: 2
Reputation: 140
#!/bin/bash
# Time Arithmetic
TIME1=05:36:11
TIME2=06:46:00
# Convert the times to seconds from the Epoch
SEC1=`date +%s -d ${TIME1}`
SEC2=`date +%s -d ${TIME2}`
# Use expr to do the math, let's say TIME1 was the start and TIME2 was the finish
DIFFSEC=`expr ${SEC2} - ${SEC1}`
echo Start ${TIME1}
echo Finish ${TIME2}
echo Took ${DIFFSEC} seconds.
# And use date to convert the seconds back to something more meaningful
echo Took `date +%H:%M:%S -ud @${DIFFSEC}`
Output:
Start 05:36:11
Finish 06:46:00
Took 4189 seconds.
Took 01:09:49
Upvotes: 1