午前0時以降の秒数はどうすればわかりますか?


11

dateプログラムを使用して、午前0時からの秒数を計算するにはどうすればよいですか?


1
日付 "+(%H * 60 +%M)* 60 +%S" | bc
groxxda 2014

1
echo $(($(date '+(%H * 60 +%M)* 60 +%S')))
groxxda

回答:


14

競合状態を回避するために、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ストリップすることでbashdash及びposhで原因の問題を09(シェルはそれが無効進数であることについて不平を言う場合)。


非常に賢く、evalを上手に利用
Ulrich Dangel

私はむしろこれらの線に沿って何かを使用したい:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.