在Bash中计算到下一个小时开始的时间



嗨,我有一个由systemd服务调用的bash脚本,它需要运行到下一个小时开始。目前我一直在使用:

currentTime=$(date +"%s")
nextHour=$(date -d "$(date -d 'next hour' '+%H:00:00')" '+%s')
duration=$(((nextHour-currentTime)*1000))

据我所知,除了试图计算晚上11点和午夜之间的差异外,其他方法都是有效的,即从23小时前的午夜到现在的午夜。

Oct 13 23:00:05 host bash[2019]: 1665698405
Oct 13 23:00:05 host bash[2019]: 1665615600
Oct 13 23:00:05 host bash[2019]: -82805000

我想如果需要的话,我可以用不同的计算进行条件检查,或者查看触发服务的systemd计时器,但由于服务需要在启动/重新启动时始终激活,并且需要逐小时运行,因此这种设置似乎更合适。

如果有任何关于为什么会发生这种情况的建议,以及关于避免这种情况的最简化步骤的建议,我们将不胜感激。

这实际上不是关于bash的问题,但似乎更多的是关于date的问题。考虑到date有多种不同的实现方式,选择不同的工具进行计算似乎更明智。我怀疑perl更标准化,(几乎(与date一样可用,所以您可以尝试使用来获得差异

perl -MTime::Seconds -MTime::Piece -E '
my $t = localtime; my $m = ($t + ONE_HOUR)->truncate(to => "hour"); say $m - $t'

最新更新