我試圖將兩個日期之間的差異(以小時,分鐘和秒爲單位)設置爲一個變量。格式爲+%y%m%d%H%M%S(例如:170607162412)。計算時間差
例如:170607162400和170607162410 = 00:00:10
我嘗試了很多,但我不能弄明白。
我試圖將兩個日期之間的差異(以小時,分鐘和秒爲單位)設置爲一個變量。格式爲+%y%m%d%H%M%S(例如:170607162412)。計算時間差
例如:170607162400和170607162410 = 00:00:10
我嘗試了很多,但我不能弄明白。
使用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")
看一看:http://www.unix.com/tips-and-tutorials/31944-simple-date-time-calulation-bash.html。 訣竅是將您的日期轉換爲時間戳(UTC 1970年1月1日以來的秒數)。比你可以添加和刪除秒,甚至相互減去日期。
date2stamp() {
date --utc --date "$1" +%s
}
stamp2date(){
date --utc --date "1970-01-01 $1 sec" "+%Y-%m-%d %T"
}
dateDiff(){
case $1 in
-s) sec=1; shift;;
-m) sec=60; shift;;
-h) sec=3600; shift;;
-d) sec=86400; shift;;
*) sec=86400;;
esac
dte1=$(date2stamp $1)
dte2=$(date2stamp $2)
diffSec=$((dte2-dte1))
if ((diffSec < 0)); then abs=-1; else abs=1; fi
echo $((diffSec/sec*abs))
}
你嘗試date命令? – 123
是的,我試圖使用這個頁面的建議:https://stackoverflow.com/questions/20831765/find-difference-between-two-dates-in-bash(抱歉不提) – N3tM0nk