2つの「テキストベース」の日付から経過時間を取得する方法

2つの「テキストベース」の日付から経過時間を取得する方法

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時間)である可能性に注意し、それに応じてフォーマットを調整してください。

関連情報