想要操纵日期命令来计算今天以后的未来

时间:2014-07-12 08:21:28

标签: linux bash date unix

我有一段代码,我一直在警报脚本中使用,我一起入侵并在过去一年左右成功使用。但是在某种意义上它一直受到限制,如果我指定的警报持续时间会超过午夜时间,超过23:59,那么警报会立即响起。

这不是问题b / c大多数时候我只是设置1分钟,5分钟,10分钟,30分钟或45分钟的警报作为快速提醒。但是现在我想扩展功能,如果需要可以扩展一天以上,我确信这是需要修改的代码片段:

sleep $(( $(date --date="$at" +%s) - $(date +%s) ));

首先运行:

15:10 ~ $ $(( $(date --date="23:59" +%s) - $(date +%s) )) ; date
bash: 31706: command not found
Sat Jul 12 15:10:34 ICT 2014

我看到有31706秒要到晚上11:59。然后:

15:10 ~ $ $(( $(date --date="00:00" +%s) - $(date +%s) )) ; date
bash: -54637: command not found
Sat Jul 12 15:10:37 ICT 2014

我可以看到代码不会简单地在午夜(明天)之前的总秒数中再添加1秒,但实际上似乎倒数到今天早些时候已经发生的午夜,大约15个小时前。

我不确定整个代码片段是否诚实。我想知道的是,如果有人为了更清楚地了解这里究竟发生了什么而有所顾忌,那么我可能会更好地修改我的脚本,以便继续向前推进,甚至超越时间戳。超过当天。

1 个答案:

答案 0 :(得分:1)

当只有给定时间时,该时间应用于当前日期,因此00:00指的是今天日期的午夜,已经发生。要参考明天开始日期的午夜,请明确指定日期为tomorrow,即整个日期时间为tomorrow 00:00

$ date
Sat Jul 12 10:29:16 CEST 2014
$ date -d "00:00"
Sat Jul 12 00:00:00 CEST 2014
$ date -d "tomorrow 00:00"
Sun Jul 13 00:00:00 CEST 2014

使用该语法,获取午夜的秒数才能正常工作:

$ echo $(( $(date -d "tomorrow 00:00" +%s) - $(date +%s) ))
48527

注意:当正好在午夜运行时,此代码将打印86400,而不是0。