yyyymmddhhmmss
シェル変数には2つの形式の日付/時刻値があります。
私は1つを別のものから減算し、次のように数秒で結果を得たいと思います。
a=20170804020000
b=20170804015959
c=a-b
私が望む結果はc=1
(02:00:00
より1秒遅いので01:59:59
)ですが、結果はですc=4041
。
秒単位で結果を取得するには、日付/時刻値をどのように減算できますか?
ベストアンサー1
まず、日付をunix time_t形式(つまり、「epoch」1970-01-01 00:00:00以降の秒数)に変換する必要があります。その後、単純なマイナスで差を計算できます。
プログラムはdate
現在の形式の日付を理解できません。数字ではなく、ダッシュとコロンで区切られたフィールドがある日付に似ていることを期待します。
sed
以下は、関数で「固定」日付を使用する例です。つまり、理解できる形式に変換してdate
からdate
time_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"