Linux Bashで経過時間を計算・表示

 もしかしたら他にいい方法があるのかもしれないけど、この方法よく使うので、備忘録として記録。


# $1 : seconds
function sec_to_hourdate()
{
	((sec=${1}%60, min=(${1}%3600)/60, hrs=${1}/3600))
	printf "%02d:%02d:%02d\n" $hrs $min $sec
}

start_sec=`date +%s`
start_date=`date +"%Y/%m/%d %H:%M:%S" --date=@${start_sec}`
・・・
何らかの処理
・・・
finish_sec=`date +%s`
finish_date=`date +"%Y/%m/%d %H:%M:%S" --date=@${finish_sec}`

def_sec=$((${finish_sec} - ${start_sec}))
echo "Spent time is `sec_to_hourdate ${def_sec}`"


説明

sec_to_hourdateは、秒数から経過時間を計算します。
「時間:分:秒」形式で標準出力に出力します。

start_secは、UNIX時刻 (1970年1月1日0時UTCからのうるう秒を考慮しない秒数)
start_dateは、UNIX時刻を与えて、測定開始時の日時を算出
finish_secは、start_secと同様、UNIX時刻
finish_dateは、start_dateと同様、測定終了時の日時を算出
def_secは、UNIX時刻での引き算。秒数同士なので簡単に計算できます。

UNIX時刻を与えて現在の日付を出す、というあたりが結構忘れがち。


メモメモ


補足

単純に経過時間を測定するだけならtimeコマンドで十分です。
「いつ」はじまって、「いつ」終わったか?を一緒に測りたかったり、複数処理を測定する必要があるけど、別スクリプト化するのがメンドクサイ。というときにこちらを使うことになるかと思います。

場合によっては、dateで時間を記録して、そのあとの処理をtimeで測定する。という方法でもよいかと。

コメント

このブログの人気の投稿

VPNでNASにリモートアクセス!QTS5.0でWireGuardを試す

レトロゲームステーションに!QNAP TS-251D

NASに保存したファイルを便利に検索する方法