変数が Start=08:22:39 で end=08:23:22 の場合。これら2つの変数の違いをどのように取得できますか?

変数が Start=08:22:39 で end=08:23:22 の場合。これら2つの変数の違いをどのように取得できますか?

開始=08:20:12 終了=08:22:12

差を計算する方法。

解決するのに役立ちます..

ベストアンサー1

両方の時間が同じ日(たとえば、23:59:00 - 00:01:00ではなく)で、時間が23より大きくないと仮定すると、次のコマンド(inbashまたはPOSIX- sh)を使用すると、数時間が表示されることを確認できます。数秒で2つの違いを知ることができます。

$ start="08:20:12" end="08:22:12"
$ echo $(( $(date +"%s" -d "$end") - $(date +"%s" -d "$start") ))
120

別の方法は、dateコマンドを使用せずに$endこの値が次の値より大きいことを確認し、そうでない場合は$start24時間の秒を追加することです。$end

# start="08:20:12" end="08:22:12"

# IFS=: read h m s <<< $start;  START=$(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} ))
# IFS=: read h m s <<< $end;  END=$(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} ))
# [[ $END -lt $START ]] && END=$(( $END + (24*60*60) ))

# echo $(( $END - $START ))
120

また、このコードは、数値が 10 より小さい場合、時/分/秒から前の 0 を削除して単一の数値に変換します (3 つの数値が両方とも 2 桁であると仮定します)。そして時間を秒に変換する関数を書いてください。

# function convert_to_seconds { IFS=: read h m s <<< $1;  echo $(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} )) ; }

# START=$(convert_to_seconds "23:59:12")
# END=$(convert_to_seconds "00:01:12")
# [[ $END -lt $START ]] && END=$(( $END + (24*60*60) ))

# echo $(( $END - $START ))
120

おすすめ記事