YYYYmmDDHHMMSS のような 2 時間の時差を見つけることができる Unix スクリプトが必要です
例
T1=20120624192555
T2=20120624204006
したがって、時差は =1:14:11 になります。
どんな手掛かり?
YYYYmmDDHHMMSS のような 2 時間の時差を見つけることができる Unix スクリプトが必要です
例
T1=20120624192555
T2=20120624204006
したがって、時差は =1:14:11 になります。
どんな手掛かり?
日付形式の指定を回避できるかどうかはわかりませんが、かなり長いdate
解決策を次に示します。
# Get seconds since epoch
D1=$(date --date "${T1:0:4}-${T1:4:2}-${T1:6:2} ${T1:8:2}:${T1:10:2}: ${T1:12:2}" +%s)
D2=$(date --date "${T2:0:4}-${T2:4:2}-${T2:6:2} ${T2:8:2}:${T2:10:2}: ${T2:12:2}" +%s)
date --date "0 + $(( D2 - D1 )) seconds" +%T
${VAR:OFF:LEN} リファレンスについては、こちらを参照してください。
注:以下のjrouquieが述べているように、これは 24 時間を超えると失敗します。これはdate
コマンドの制限ですが、 $(( D2 - D1 )) でも数秒で正しい結果が得られます。
これは、Thor/kjpと私のものを最大限に活用したソリューションです。
#!/bin/bash
function seconds_since_epoch() {
echo $(date --utc --date "${1:0:4}-${1:4:2}-${1:6:2}
${1:8:2}:${1:10:2}:${1:12:2}" +%s)
}
difference=$(( `seconds_since_epoch $2` - `seconds_since_epoch $1` ))
echo \
`expr $difference / 3600`:\
`expr "(" $difference / 60 ")" % 60`:\
`expr $difference % 60`
time1=`echo $1 | sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1-\2-\3 \4:\5:\6/'`
time2=`echo $2 | sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1-\2-\3 \4:\5:\6/'`
seconds1=`date --utc -d "$time1" +%s`
seconds2=`date --utc -d "$time2" +%s`
difference=`expr $seconds2 - $seconds1`
echo `expr $difference / 3600`:`expr "(" $difference / 60 ")" % 60`:`expr $difference % 60`
--utc
which を使用すると、夏時間のバグが防止されることに注意してください。
警告:
このスクリプトは入力をチェックしません。
$2 > $1 を想定しています。
繰り返しコードを因数分解するように書き直すことができます
編集: 最初のコメントに関して、sed の「-r」オプションを使用しないバージョンを次に示します (-r は --regexp-extended を意味し、ここではすべてのバックスラッシュを省くことができます)。
time1=`echo $1 | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1-\2-\3 \4:\5:\6/'`
time2=`echo $2 | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1-\2-\3 \4:\5:\6/'`
seconds1=`date --utc -d "$time1" +%s`
seconds2=`date --utc -d "$time2" +%s`
difference=`expr $seconds2 - $seconds1`
echo `expr $difference / 3600`:`expr "(" $difference / 60 ")" % 60`:`expr $difference % 60`