Bashで2時間の違いを計算する方法があるかどうか疑問に思います。ログファイルから抽出された2つのフィールドがあります。
開始時間:2月12日10:02:10終了時間:2月12日10:53:15
私にとって必要なのは、これら2つの日付の間の経過時間を手動で取得する方法です。時刻値は日付生成コマンドではなく「テキストベース」なので、これを行う方法があるかどうかわかりません。時間は24時間形式なので、真夜中以降の時間を処理しやすくなることを願っています。どんなアドバイスも本当にありがとうございます。ピーターV。
答え1
使用できるいくつかの邪悪なトリックがあります。
date -d "Feb 12 10:02:10" +%s
この日付のエポック以降の秒数を返します。これを同じコマンド(他の日付の場合)と組み合わせて、次のコマンドを実行しますbc
。
echo "$(date -d 'Feb 12 10:53:15' +%s) - $(date -d 'Feb 12 10:02:10' +%s)" | bc
またはシェル算術拡張:
echo "$(( $(date -d 'Feb 12 10:53:15' +%s) - $(date -d 'Feb 12 10:02:10' +%s) ))"
あなたに与える
3065
時間の間の秒数。awk
何度も実行する必要がある場合は、何らかの方法で解析できます。
答え2
外部ヘルパーユーティリティが気に入らない場合は、私のユーティリティを見てください。日付ツール。上記の操作は次のように解釈されます。
ddiff -i '%b %d %H:%M:%S' 'Feb 12 10:02:10' 'Feb 12 10:53:15'
=>
3065s
-i
入力日の形式を説明するために使用されます。
答え3
他の解決策はそうではありません。bc
1.日付をUnix時間(POSIX時間またはUNIX Epoch時間とも呼ばれる)に変換
$ date1=$(date -d "Feb 12 10:02:10" +%s)
$ date2=$(date -d "Feb 12 10:53:15" +%s)
$ printf '%s\n' "$date1" "$date2"
1518447730
1518450795
$
2. 2 つの日付の差を計算します。
$ datediff="$((date2-date1))"
3. 数秒で答えを得ることができます。
$ echo "$datediff"
3065
$
4. 時、分、秒形式に変換
$ printf '%02dh:%02dm:%02ds\n' $(($datediff/3600)) $(($datediff%3600/60)) $(($datediff%60))
00h:51m:05s
または
$ TZ=UTC date '+%H:%M:%S' -d"@$datediff"
00:51:05
結果が≥86400(例:24時間)である可能性に注意し、それに応じてフォーマットを調整してください。