Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用linux日期获取下一次发生的时间_Linux_Date - Fatal编程技术网

使用linux日期获取下一次发生的时间

使用linux日期获取下一次发生的时间,linux,date,Linux,Date,Linuxdate实用程序可以理解许多字符串,例如: $ date -d '8:30' Fri Jan 2 08:30:00 CET 2015 我正在寻找一种方法来获得下一个8:30,因此: 如果在8:30之前是1月2日星期五,则应返回上述结果 否则,它应该打印2015年1月3日星期六08:30:00 CET 可以看出下一个8:30不会得到正确的答案: $ date -d 'next 8:30' date: invalid date ‘next 8:30’ 有没有一个表达式可以计算这个

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

$ date -d '8:30'
Fri Jan  2 08:30:00 CET 2015
我正在寻找一种方法来获得下一个
8:30
,因此:

  • 如果在
    8:30
    之前是
    1月2日星期五
    ,则应返回上述结果
  • 否则,它应该打印
    2015年1月3日星期六08:30:00 CET
可以看出
下一个8:30
不会得到正确的答案:

$ date -d 'next 8:30'
date: invalid date ‘next 8:30’
有没有一个表达式可以计算这个

当然,在shell中自己处理它是一种选择,但由于夏时制的规定等原因,使事情变得更加复杂

如果时钟适应夏令时,则应根据第二天的设置将
next 8:30
解析为
8:30

测试用例

鉴于时间为2015年1月2日星期五12:01:01 CET,结果应为:

$ 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

只需使用以下内容:

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

只需使用以下内容:

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

只需使用以下内容:

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'
如果您想轻松地处理此问题,请创建一个函数来执行这些计算

试验
我进行了研究,但似乎不可能这样做

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

[ $(date '+%H%M') -le 830 ] && date -d '8:30' || date -d '8:30 + 1 day'
如果您想轻松地处理此问题,请创建一个函数来执行这些计算

试验
我进行了研究,但似乎不可能这样做

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

[ $(date '+%H%M') -le 830 ] && date -d '8:30' || date -d '8:30 + 1 day'
如果您想轻松地处理此问题,请创建一个函数来执行这些计算

试验
我进行了研究,但似乎不可能这样做

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

[ $(date '+%H%M') -le 830 ] && date -d '8:30' || date -d '8:30 + 1 day'
如果您想轻松地处理此问题,请创建一个函数来执行这些计算

试验