bc
を使用したこのソリューションの提案 :
current="$(date +%s.%N)" #current date, precise to nanoseconds
old="$(date +%s.%N -d "$(sh some_script_that_gives_a_date.sh)")" #convert output to ns too
diff=$(echo "$current-$old" |bc)
date +%s.%N -d $1
任意の日付を取り、指定された形式に変換します (この場合は +%s.%N
のように) 、 float
秒) .
-d は POSIX 日付の一部ではありません。 [しかし] [あなたが] Solaris のようなディストリビューションに取り組んでいない限り ([OP] は unix ではなく linux とタグ付けしています) [あなた] は良いはずです。 :)
(この回答に対する jaypal singh のコメント)
人間が読める形式に戻すには、date $2 -d @0$diff #Pad diff with leading zero
を使用できます。
どこで $2
これも日付形式です。たとえば、ここを参照してください
let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF