linux - 想要操纵日期命令来计入今天之后的 future

标签 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

我看到距离晚上 11:59 还有 31706 秒。然后:

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 个多小时前。

老实说,我不确定整个代码片段。我想知道的是,是否有人会介意将事情分解以便更清楚地了解这里到底发生了什么,这样我就可以更好地修改我的脚本,以便它继续向前计数到 future ,甚至超越将要发生的时间戳超出当前日期。

最佳答案

只有给定时间时,该时间适用于当前日期,因此 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。

关于linux - 想要操纵日期命令来计入今天之后的 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24711094/

相关文章:

linux - libusb 批量传输的最大长度

python - 如何检查参数是否存在于python中

Bash c-style if 语句和样式技术

bash - 如何使用 grep 查找给定的字符串

bash - RSync 仅当文件系统被挂载时

c# - 解析日期字符串以获取年份

Linux 文本编辑器 : Pretty. 快。强大的。容易拿起

sql - 使用 Redshift 转换日期

javascript - 我需要验证我的日历,以便它只接受当前或 future 的日期?

c++ - 可以检查 ioctl 的权限