日付合計の計算

日付合計の計算

ジョブが実行された時間(分)に基づいて情報を抽出するサードパーティのスクリプトを使用します。スクリプトにはこの入力が必要です。

たとえば、
これは例です。

    export etool_start=`date +"%Y%m%d%H%M:"`  

私のデフォルトスクリプトは、開始時刻と終了時刻の間で実行されます。

    export etool_end=`date +"%Y%m%d%H%M"`

上記の結果の出力は201607050220:201607050230と同じです。時間は0220~0230です。私のスクリプトはこの日付タイプを受け入れず、-0010(10分)などの分だけを受け入れます。この結果を得るのに役立つ数学をどのように作成できますか?私が提示した時間は一例に過ぎず、サンプリング間隔は2分から120分、1日まで可能です。この種の出力を取得するには、dateコマンドをどのように使用しますか?

助けてください。

ありがとうございます。

ベストアンサー1

エポック( )以降の時間を秒単位で測定する方がはるかに簡単です。+%s次に、減算して秒単位の経過時間を探し、秒を分に変換するには60で割ります。

export etool_start=$(date +"%s")
do_stuff_with_etool
export etool_stop=$(date +"%s")
echo "elapsed time=$(( (etool_stop - etool_start)/60 )) minutes"

人間の形の時間が本当に必要な場合は変換できます。 GNUの使用date:

$ date -d "@$etool_start"
Tue Jul  5 21:30:19 PDT 2016

または:

$ date -d "@$etool_start"  "+%Y%m%d%H%M"
201607052130

書式設定に関する追加情報

経過時間をさまざまな形式で分単位で表示するには、を使用できますprintf。たとえば、4桁の経過時間を生成するには、次の形式を使用できます%04i

$ printf '%04i\n' "$(( ($etool_stop - $etool_start)/60 ))" 
0001

の形式は%4i4桁の整数(i)を提供します。先行スペースの代わりに先行ゼロが必要な場合はを使用します%04i

数字の逆符号が必要な場合:

$ printf '%05i\n' "$(( ($etool_start - $etool_stop)/60 ))" 
-0035

マイナス記号には追加の文字が必要なので、割り当てられたスペースを4から5に増やします%05i

その他の回避策

上記の例ではbash算術を使用しているので、整数にすぎません。経過時間を分単位(分単位を含む)として確認するには、次のようbcな他のツールを使用できます。

$ echo "($etool_stop - $etool_start)/60" | bc -l
1.38333333333333333333

エポックから数秒経過しましたか?

epoch 以降の秒数はman date次のように定義されます。


1970-01-01 00:00:00 UTC以降%s秒

このように定義されているので、ローカルタイムゾーンは重要ではありません。したがって、-u「現地時間帯」または世界時間での計算に違いはありません。

$ date +%s; date -u +%s
1467780345
1467780345

おすすめ記事