Bash script: difference in minutes between two times

前端 未结 7 1589
不思量自难忘°
不思量自难忘° 2020-12-31 07:55

I have two time strings; eg. \"09:11\" and \"17:22\" on the same day (format is hh:mm). How do I calculate the time difference in minutes between these two?

Can the

相关标签:
7条回答
  • 2020-12-31 08:01

    I was looking for a solution with seconds. Found here: How to calculate time difference in bash script?

    #!/bin/bash
    string1="10:33:56"
    string2="10:36:10"
    StartDate=$(date -u -d "$string1" +"%s")
    FinalDate=$(date -u -d "$string2" +"%s")
    date -u -d "0 $FinalDate sec - $StartDate sec" +"%H:%M:%S"
    

    Here I have added seconds to Gilles' solution:

    function countTimeDiff() {
        timeA=$1 # 09:59:35
        timeB=$2 # 17:32:55
    
        # feeding variables by using read and splitting with IFS
        IFS=: read ah am as <<< "$timeA"
        IFS=: read bh bm bs <<< "$timeB"
    
        # Convert hours to minutes.
        # The 10# is there to avoid errors with leading zeros
        # by telling bash that we use base 10
        secondsA=$((10#$ah*60*60 + 10#$am*60 + 10#$as))
        secondsB=$((10#$bh*60*60 + 10#$bm*60 + 10#$bs))
        DIFF_SEC=$((secondsB - secondsA))
        echo "The difference is $DIFF_SEC seconds.";
    
        SEC=$(($DIFF_SEC%60))
        MIN=$((($DIFF_SEC-$SEC)%3600/60))
        HRS=$((($DIFF_SEC-$MIN*60)/3600))
        TIME_DIFF="$HRS:$MIN:$SEC";
        echo $TIME_DIFF;
    }
    
    0 讨论(0)
  • 2020-12-31 08:07

    Here is how I did it:

    START=$(date +%s);
    sleep 1; # Your stuff
    END=$(date +%s);
    echo $((END-START)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}'
    

    Really simple, take the number of seconds at the start, then take the number of seconds at the end, and print the difference in minutes:seconds.

    0 讨论(0)
  • 2020-12-31 08:15
    STARTTIME=$(date +%s)
    

    YOUR CODES :

    ENDTIME=$(date +%s)
    secs=$(($ENDTIME - $STARTTIME))
    printf 'Elapsed Time %dh:%dm:%ds\n' $(($secs/3600)) $(($secs%3600/60)) $(($secs%60)) 
    
    0 讨论(0)
  • 2020-12-31 08:16

    I would convert the dates to UNIX timestamps; you can subtract to get the difference in seconds, then divide by 60:

    #!/bin/bash
    
    MPHR=60    # Minutes per hour.
    
    CURRENT=$(date +%s -d '2007-09-01 17:30:24')
    TARGET=$(date +%s -d'2007-12-25 12:30:00')
    
    MINUTES=$(( ($TARGET - $CURRENT) / $MPHR ))
    
    0 讨论(0)
  • 2020-12-31 08:18

    @Dorian
    If you just want to know how long a program took to run: time, man, man time!

    Trivial example:

    jonathan@Odin:~$ time sleep 1
    
    real    0m1.001s
    user    0m0.000s
    sys     0m0.000s
    

    OK, it doesn't give the result in seconds, but you can make it do so with a format string, or more simply with the POSIX compliance option:

    jonathan@Odin:~$ time -p sleep 20
    real 20.00
    user 0.00
    sys 0.00
    
    0 讨论(0)
  • 2020-12-31 08:20
    MPHR=60
    CURRENT=09:11
    TARGET=17:22
    echo $(( ( 10#${TARGET:0:2} - 10#${CURRENT:0:2} ) * MPHR + 10#${TARGET:4} - 10#${CURRENT:4} ))
    
    0 讨论(0)
提交回复
热议问题