计算时间差

Calculating difference in time

我正在尝试将两个日期之间的差异(以小时、分钟和秒为单位)设置为一个变量。格式为+%y%m%d%H%M%S(例如:170607162412)。

例如:170607162400 和 170607162410 = 00:00:10

我试了很多,还是想不通。

看这里:http://www.unix.com/tips-and-tutorials/31944-simple-date-time-calulation-bash.html。 诀窍是将您的日期转换为时间戳(自 1970 年 1 月 1 日以来的秒数。UTC)。你可以添加和删除秒数,甚至可以相互减去日期。

date2stamp () {
    date --utc --date "" +%s
}

stamp2date (){
    date --utc --date "1970-01-01  sec" "+%Y-%m-%d %T"
}

dateDiff (){
    case  in
        -s)   sec=1;      shift;;
        -m)   sec=60;     shift;;
        -h)   sec=3600;   shift;;
        -d)   sec=86400;  shift;;
        *)    sec=86400;;
    esac
    dte1=$(date2stamp )
    dte2=$(date2stamp )
    diffSec=$((dte2-dte1))
    if ((diffSec < 0)); then abs=-1; else abs=1; fi
    echo $((diffSec/sec*abs))
}

date先换算成秒,再减去。然后解析出分秒:

$ var1=170607162400
$ var2=170607162410
$ var="$var1"
$ date1="20${var:0:2}/${var:2:2}/${var:4:2 {var:6:2}:${var:8:2}:${var:10:2}"
$ var="$var2"
$ date2="20${var:0:2}/${var:2:2}/${var:4:2} ${var:6:2}:${var:8:2}:${var:10:2}"
$ sec1=$( date -d "$date1" '+%s' )
$ echo $sec1
1496867040
$ sec2=$( date -d "$date2" '+%s' )
$ echo $sec2
1496867050
$ dt=$(( sec2 - sec1 ))
$ echo $dt
10
$ min=$(( dt/60 ))
$ sec=$(( dt - 60*min ))
$ minsec=$( printf "%02d:%02d" "$min" "$sec" )
$ echo "$minsec"
00:10

如果您也需要几个小时,请像这样更改最后几行:

$ hrs=$(( dt/3600 ))
$ min=$(( (dt - 3600*hrs) / 60 ))
$ sec=$(( dt - 3600*hrs - 60*min ))
$ hms=$( printf "%d:%02d:%02d" "$hrs" "$min" "$sec" )