获取 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
的方法,因此:
- 如果在
8:30
之前是Fri Jan 2
,则返回上面的结果;
- 否则它应该打印
Sat Jan 3 08:30:00 CET 2015
.
如您所见,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
Linux date
实用程序可以理解很多字符串,例如:
$ date -d '8:30'
Fri Jan 2 08:30:00 CET 2015
我正在寻找获得下一个 8:30
的方法,因此:
- 如果在
8:30
之前是Fri Jan 2
,则返回上面的结果; - 否则它应该打印
Sat Jan 3 08:30:00 CET 2015
.
如您所见,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