计算时间差
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" )
我正在尝试将两个日期之间的差异(以小时、分钟和秒为单位)设置为一个变量。格式为+%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" )