日付差の計算[重複]

日付差の計算[重複]

次の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/

このコマンドとは異なり、datedateutils はデフォルトで 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

関連情報