2017-06-07 690 views
0

我試圖將兩個日期之間的差異(以小時,分鐘和秒爲單位)設置爲一個變量。格式爲+%y%m%d%H%M%S(例如:170607162412)。計算時間差

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

我嘗試了很多,但我不能弄明白。

+0

你嘗試date命令? – 123

+0

是的,我試圖使用這個頁面的建議:https://stackoverflow.com/questions/20831765/find-difference-between-two-dates-in-bash(抱歉不提) – N3tM0nk

回答

0

使用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") 
1

看一看: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)) 
}