2017-09-27 121 views
-1

我已閱讀關於此主題的許多文檔,但我沒有找到正確的解決方案來解決我的問題。Bash數據 - 如何減去30分鐘

我會從某個變量中減去30分鐘。 我已經大致準備這樣的:

Monday=0120 
date_mon=`date -d $Monday +"%H%M"` 
echo $date_mon 
0120 
new_date_mon=`date -d "$date_mon -30 min" +"%H%M"` 
date: invalid date '0120 -30 min' 

edit: on the Linux is fine: 
0050 

(小時必須以這樣形式%H%M)。

我不知道我在做什麼錯。

$編輯:

上面的代碼是正確的。我試圖通過顯示錯誤的MobaXterm來執行它,但正如我直接在Linux上所做的那樣。

+2

輸入日期'星期一'是'HH:MM'格式?即'01:20' – Inian

+2

'0120'是什麼意思? –

+0

星期一採用HHMM格式。我沒有冒號需要它。我必須從0120 30分鐘中扣除以得到0050的結果。 – KamilK

回答

1

以下命令減去30分鐘至下週一01:20

date -d 'Monday 0120 -30min' +'%F %T' 

以其它方式使用算術運算

hhmm=0120 
((m_from_start_day=(10#$hhmm)/100*60+(10#$hhmm)%100)) 
((m_from_start_day-=30)) 
((hhmm=m_from_start_day/60*100+m_from_start_day%60)) 
echo $hhmm 

爲了保持零

printf -v hhmm %04d $((m_from_start_day/60*100+m_from_start_day%60)) 
echo $hhmm 

注意的命令是固定的,因爲領先0表示輸入是八進制的,必須使用(10#$hhmm)hhmm

另外的printf -v HHMM,作品除非HHMM與-i聲明,(declare +i hhmm刪除標誌),否則前導零將從八進制轉換爲十進制。

+0

第一個選項繼續顯示相同的錯誤,但第二個選項可以,但也許你知道如何在50之前保留兩個零?我需要0050的價值。 – KamilK