获取 linux 日期的下一次事件

Get the next time occurance with linux date

Linux date 实用程序可以理解很多字符串,例如:

$ date -d '8:30'
Fri Jan  2 08:30:00 CET 2015

我正在寻找获得下一个 8:30 的方法,因此:

如您所见,next 8:30 未得出正确答案:

$ date -d 'next 8:30'
date: invalid date ‘next 8:30’

是否有一个表达式可以计算这个?

在 shell 自己处理它当然是一种选择,但由于 夏令时 法规等,使事情变得更加复杂

如果时钟适配夏令时,next 8:30需要根据第二天的设置解析为8:30

测试用例:

假设是Fri Jan 2 12:01:01 CET 2015,结果应该是:

$ date -d 'next 8:30'
Sat Jan  3 08:30:00 CET 2015

$ date -d 'next 15:30'
Fri Jan  2 15:30:00 CET 2015

只需使用类似的东西:

if [[ $(date -d '8:30 today' +%s) -lt $(date +%s) ]] ; then
    next830="$(date -d '8:30 tomorrow')"
else
    next830="$(date -d '8:30 today')"
fi

%s 格式字符串给出自纪元以来的秒数,因此 if 语句基本上是:

if 8:30-today is before now:
    use 8:30-tomorrow
else
    use 8:30-today

我研究了一下,好像不行。

你可能做的是将小时和分钟与 830 进行比较并相应地打印:

[ $(date '+%H%M') -le 830 ] && date -d '8:30' || date -d '8:30 + 1 day'

如果您想轻松地使用它,请创建一个函数来进行这些计算。

测试

$ [ $(date '+%H%M') -le 830 ] && date '8:30' || date -d '8:30 + 1 day'
Sat Jan  3 08:30:00 CET 2015