Linux date
实用程序可以理解很多字符串,例如:
$ date -d '8:30'
Fri Jan 2 08:30:00 CET 2015
我正在寻找获得下一个8:30
的方法,因此:
Fri Jan 2
之前为8:30
,则应返回上述结果; 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
答案 0 :(得分:2)
只需使用:
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
答案 1 :(得分:1)
我研究过,似乎不可能这样做。
您可以做的是将小时和分钟与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