簡體   English   中英

獲取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 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’

是否有一個表達式來計算?

自己處理它當然是一個選擇,但是由於夏時制等原因,使事情變得更加復雜。

如果時鍾適應夏時制,則應根據第二天的設置將下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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM