回答:
競合状態を回避するために、GNUの日付を仮定します。
eval "$(date +'today=%F now=%s')"
midnight=$(date -d "$today 0" +%s)
echo "$((now - midnight))"
ではzsh
、内部的にそれを行うことができます:
zmodload zsh/datetime
now=$EPOCHSECONDS
strftime -s today %F $now
strftime -rs midnight %F $today
echo $((now - midnight))
移植性があり、夏時間の切り替えがないタイムゾーンでは、次のことができます。
IFS=:
set -- $(date +%T)
echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))"
${X#0}
一流一部のシェルで好き0ストリップすることでbash
、dash
及びposh
で原因の問題を09
(シェルはそれが無効進数であることについて不平を言う場合)。
IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
算術式は必要ありません。純粋な日付を使用してください。
date -d "1970-01-01 UTC $(date +%T)" +%s
brew install coreutils
と置き換えるdate
とgdate
bashに基づいて、現在の時刻を真夜中からのミリ秒単位で取得します。GNUシステムでは、次のように実行できます。
$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983
date -d @$seconds