GNU/Linux >> Linux の 問題 >  >> Linux

Bash:2 つのタイムスタンプ間の経過時間を計算する

これにより、日付が秒単位で表示されます (UNIX エポック以降)

date --date '2017-08-17 04:00:01' +%s    # "1502938801"

これにより、秒数から読み取り可能な文字列として日付が得られます

date --date '@1502938801'    # "17 Aug 2017 04:00:01"

必要なのは、日付/タイムスタンプを GNU date の形式に変換することだけです 理解し、数学を使用して違いを判断し、結果を出力することができます

datetime1=20170817040001
datetime2=20160312000101

seconds1=$(date --date "$(echo "$datetime1" | sed -nr 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3 \4:\5:\6/p')" +%s)
seconds2=$(date --date "$(echo "$datetime2" | sed -nr 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3 \4:\5:\6/p')" +%s)

delta=$((seconds1 - seconds2))
echo "$delta seconds"    # "45197940 seconds"

ここではタイムゾーン情報を提供していないため、ローカル タイムゾーンを想定しています。日時からの秒数の値は、おそらく私のものとは異なるでしょう。 (値が UTC の場合は date --utc を使用できます .)


これは datediff で簡単です dateutils で提供されるコマンド パッケージ。

ddiff -i '%Y%m%d%H%M%S' 20170817040001 20160312000101

Linux
  1. Linux、Bash でエポック以降の現在の時間を秒単位で取得する

  2. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

  3. 日付範囲内で作成されたファイルを検索

  1. Linux bashでISO日付をエポックからの秒数に変換する

  2. Bashスクリプトの実行とソースの違いは何ですか?

  3. サーバーで現在の時刻を取得するにはどうすればよいですか?

  1. Linuxサーバーで日付、時刻、およびタイムゾーンを設定します

  2. プロセスの実行にかかった秒数を変数に保存します

  3. 複数のコマンドの実行時間を計る