如何使用日期查找下一小时的秒数?我知道我能做到
date -d "next hour"
Run Code Online (Sandbox Code Playgroud)
但这只是增加1小时到现在.我想让它显示下一个整整一小时的秒数.例如,如果当前时间是9:39am我想要找到的秒数10am
现在的纪元时间戳是
now=$(date '+%s')
Run Code Online (Sandbox Code Playgroud)
那个下一个小时是
next=$(date -d $(date -d 'next hour' '+%H:00:00') '+%s')
Run Code Online (Sandbox Code Playgroud)
到下一个小时的秒数
echo $(( next - now ))
Run Code Online (Sandbox Code Playgroud)
要获得持续的解决方案,请使用以
now() { date +%s; }
next() { date -d $(date -d "next ${1- hour}" '+%H:00:00') '+%s'; }
Run Code Online (Sandbox Code Playgroud)
现在你有了
echo $(( $(next) - $(now) ))
Run Code Online (Sandbox Code Playgroud)
乃至
echo $(( $(next day) - $(now) ))
Run Code Online (Sandbox Code Playgroud)
另一种稍微有点算术的方法仍然使用纪元时间戳.我们知道它开始于一个小时,因此时间戳mod 3600在一小时内仅等于零.从而
$(( $(date +%s) % 3600 ))
Run Code Online (Sandbox Code Playgroud)
是自上一小时以来的秒数
$(( 3600 - $(date +%s) % 3600 ))
Run Code Online (Sandbox Code Playgroud)
是下一个秒的秒数.
好吧,总有一种直截了当的方式:
read min sec <<<$(date +'%M %S')
echo $(( 3600 - 10#$min*60 - 10#$sec ))
Run Code Online (Sandbox Code Playgroud)
编辑:删除竞争条件,添加显式基数.谢谢,@rici和@gniourf_gniourf.