我正在編寫一個腳本,它需要計算兩個時間戳之間的差異。我做了一些搜索,但到目前爲止還沒有得到任何線索。命令在UNIX中Substract兩個時間戳
比如講:
time1 = 20160314 10:16:27
time2 = 20160313 15:17:28
從上面我需要得到結果如下圖所示:不同的是:「1天5小時1分鐘1秒」
請幫我解決這個。
我正在編寫一個腳本,它需要計算兩個時間戳之間的差異。我做了一些搜索,但到目前爲止還沒有得到任何線索。命令在UNIX中Substract兩個時間戳
比如講:
time1 = 20160314 10:16:27
time2 = 20160313 15:17:28
從上面我需要得到結果如下圖所示:不同的是:「1天5小時1分鐘1秒」
請幫我解決這個。
datediff() {
t1=$(date -d "$1" +%s)
t2=$(date -d "$2" +%s)
diff=$(($t1 - $t2))
echo "Duration: $(($diff/86400)) days $(($diff/3600)) hours $((($diff % 3600)/60)) minutes $(($diff % 60)) seconds"
}
date -d "$1" +%s
將給定日期轉換爲時間戳(從1970年算起)。
上的日期轉換的更多細節
http://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html#Date-input-formats
例如:
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
http://unix.stackexchange.com/questions/24626/quickly-calculate-date-differences :-) – ghoti
你可能要使用的命令是date
,但它的使用取決於您的操作系統。您在問題的標籤中指定了unix,這對於單個答案來說不夠具體。
一般來說,您可以通過計算它們之間的秒數來計算日期之間的差異。因此,您的方法應該是找出每個日期的第二個unix時期,然後減去以找出差異,然後以適合您的任何格式打印結果。
在Linux中,GNU日期(來自「coreutils」)有一個-d
選項,它可以理解大量的日期引用。
$ time1="20160314 10:16:27"
$ date -d "$time1" '+%s'
1457964987
而且你可以計算出這樣的兩個日期之間的秒差:
echo "$(($(date -d "$time1" '+%s') - $(date -d "$time2" '+%s')))"
轉換,爲您的輸出格式爲師和剩餘物的一個簡單的問題:
s=$(($(date -d "$time1" '+%s') - $(date -d "$time2" '+%s')))
printf "%d day(s) %d hours %d minute %d second\n" \
$((s/86400)) \
$((s % 86400/3600)) \
$((s % 3600/60)) \
$((s % 60))
另一方面,在FreeBSD中,-d
選項做了一些完全不同的事情,你可以使用-f
和-v
來解析並調整日期。例如:
$ time1="20160314 10:16:27"
$ date -j -f '%Y%m%d %T' "$time1" '+%s'
1457964987
搞清楚的區別類似於Linux的方法,那麼:
s=$(($(date -j -f '%Y%m%d %T' "$time1" '+%s') - $(date -j -f '%Y%m%d %T' "$time2" '+%s')))
然後,您可以使用相同的printf
命令我上面顯示格式化輸出。
我沒有關於date
命令在Solaris或其他操作系統中如何工作的詳細信息,但可以從shell中獲取man date
以查看這兩種策略中的任何一種是否與您運行的任何操作系統兼容。
btw time1 - time2是1天減去5h 1m 1s –
Lol 它是一個命令嗎?如果你能夠幫助,我會很感激 –
你需要'date'命令(hint,'-d'選項)和shell算術(hint,'''''''運算符)來進行計算。 –