次の2時間の時差を計算したいです。
Value1=2016-10-13 14:19:23
Value2=2016-10-13 18:19:23
時間/分形式で違いを得たいです。迅速な解決策がありますか?
答え1
GNU実装を想定してコマンド置換を使用し、date
算術拡張を使用して時間差を取得できます。
% Value1='2016-10-13 14:19:23'
% Value2='2016-10-13 18:19:23'
% echo "$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s')))"
14400
結果は秒単位です。
答え2
時間/分/秒単位で回答:
date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%T'
答えを得るには数時間/分しかかかりません(元の要求どおり)。
date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%H:%M'
上記は、ユーザーが時間と分の違いにのみ関心を持ち、日付の違いは無視すると想定しています。答えは完全に何が欲しいのかによって異なります。
1日以上の差を処理します。
Value1='2016-10-13 14:19:23'
Value2='2016-10-18 10:34:58'
D1=$(date -d "$Value1" '+%s'); D2=$(date -d "$Value2" '+%s')
echo "$(((D2-D1)/86400)):$(date -u -d@$((D2-D1)) +%H:%M)"
生産する:
4:20:15
さまざまなシェルの場合、Bashで次のことを行うこともできます。
declare -i Delta=D2-D1
declare -i Days=Delta/86400
echo "$Days:$(date -u -d@$Delta +%H:%M)"
答え3
$ datediff -f "%H hours and %M minutes" "2016-10-13 14:19:23" "2016-10-13 18:19:23"
4 hours and 0 minutes
datediff は dateutils パッケージで提供されます。http://www.fresse.org/dateutils/
このコマンドとは異なり、date
dateutils はデフォルトで GMT を使用し、ロケールを無視します。これにより、夏時間調整に1時間の差が生じる可能性があります。
比較する:
$ datediff -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
24:0
そして
$ datediff --from-zone=Europe/Berlin -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
25:0