yyyymmddhhmmss形式で日付と時刻を減算する

yyyymmddhhmmss形式で日付と時刻を減算する

yyyymmddhhmmssシェル変数には2つの形式の日付/時刻値があります。
私は1つを別のものから減算し、次のように数秒で結果を得たいと思います。

a=20170804020000
b=20170804015959
c=a-b

私が望む結果はc=102:00:00より1秒遅いので01:59:59)ですが、結果はですc=4041

秒単位で結果を取得するには、日付/時刻値をどのように減算できますか?

ベストアンサー1

まず、日付をunix time_t形式(つまり、「epoch」1970-01-01 00:00:00以降の秒数)に変換する必要があります。その後、単純なマイナスで差を計算できます。

プログラムはdate現在の形式の日付を理解できません。数字ではなく、ダッシュとコロンで区切られたフィールドがある日付に似ていることを期待します。

sed以下は、関数で「固定」日付を使用する例です。つまり、理解できる形式に変換してdateからdatetime_t 秒に変換を使用して減算するということです。

#!/bin/bash

a=20170804020000
b=20170804015959

function fixdate() {
  printf "$1" | sed -E -e 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3 \4:\5:\6/'
}

a_seconds="$(date -d "$(fixdate "$a")" '+%s')"
b_seconds="$(date -d "$(fixdate "$b")" '+%s')"
seconds=$((a_seconds - b_seconds))

echo "$seconds"

おすすめ記事